P1009

#include <bits/stdc++.h>

const int N = 1010, M = 50010;
int t, n, m, e;
int head[N], nxt[M << 1], to[M << 1], idx;
bool vis[N];
int match[N];

void add(int u, int v) {
    nxt[idx] = head[u];
    to[idx] = v;
    head[u] = idx;
    ++ idx;
    return;
}
bool matching(int u) {
    for (int i = head[u]; i != -1; i = nxt[i]) {
        int v = to[i];
        if (vis[v]) {
            continue;
        }
        vis[v] = true;
        if (!match[v] || matching(match[v])) {
            match[v] = u;
            return true;
        }
    }
    return false;
}
int max_matching(void) {
    int res = 0;
    for (int i = 1; i <= n; ++ i) {
        for (int j = 1; j <= n + m; ++ j) {
            vis[j] = false;
        }
        res += int(matching(i));
    }
    return res;
}

int main(void) {
    scanf("%d", &t);
    while (t --) {
        scanf("%d%d%d", &n, &m, &e);

        for (int i = 1; i <= n + m; ++ i) {
            head[i] = -1;
            match[i] = 0;
        }
        idx = 0;

        int inpu, inpv;
        for (int i = 1; i <= e; ++ i) {
            scanf("%d%d", &inpu, &inpv);
            add(inpu, n + inpv);
            add(n + inpv, inpu);
        }
        int ans = max_matching();
        printf("%d\n", ans);
    }
    return 0;
}