#include using namespace std; const int N = 1e5 + 5; int T, x, y, m, d[N]; vector ansx, ansy, g[N]; mt19937 rnd(time(0)); int rd(int l, int r){ return rnd() % (r - l + 1) + l; } void print(){ cout << ansx.size() << ' ' << ansy.size() << '\n'; for(int v : ansx) cout << v << ' '; cout << '\n'; for(int v : ansy) cout << v << ' '; cout << '\n'; } void Solve(){ cin >> x >> y >> m; for(int i = 1; i <= x; i++) g[i].clear(); for(int i = 1, u, v; i <= m; i++){ cin >> u >> v; g[v].push_back(u); } for(int i = 1; i <= y; i++){ sort(g[i].begin(), g[i].end()); g[i].erase(unique(g[i].begin(), g[i].end()), g[i].end()); } for(int i = 1; i <= 30; i++){ ansx.clear(), ansy.clear(); for(int j = 1; j <= y; j++){ int op = rd(0, 1); if(op) ansy.push_back(j); } fill(d + 1, d + x + 1, 0); for(int v : ansy){ d[v]++; } for(int j = 1; j <= x; j++){ if(d[j] % 2 == 1) ansx.push_back(j); } if(ansx.size() + ansy.size() >= (x + y + 1) / 2){ print(); return ; } } } int main(){ ios::sync_with_stdio(0), cin.tie(0); for(cin >> T; T--; Solve()){ } return 0; }