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;
}