#include #include #include #include using namespace std; void solve() { int x,y,m; cin >> x >> y >> m; vector> uv(m); for(int i=0;i> uv[i].first >> uv[i].second; --uv[i].first; --uv[i].second; } sort(uv.begin(), uv.end()); uv.erase(unique(uv.begin(), uv.end()), uv.end()); int m_=uv.size(); vector u(m_); vector v(m_); vector g(y, vector()); vector largest_star(x); for(int i=0;ilargest_star[u[i]]){ largest_star[u[i]]=v[i]; } } vector blue; vector red; vector is_odd(x); for(int r=0;r odd, even; for(int b: g[r]){ if(largest_star[b]==r){ if(is_odd[b]){ odd.emplace_back(b); } else { even.emplace_back(b); } } } if(odd.size()>even.size()){ for(int b: odd){ blue.emplace_back(b); } } else { red.emplace_back(r); for(int b: even){ blue.emplace_back(b); } for(int b: g[r]){ is_odd[b].flip(); } } } cout << blue.size() << " " << red.size() << endl; for(int b: blue){ cout << b+1 << " "; } cout << endl; for(int r: red){ cout << r+1 << " "; } cout << endl; } int main(void) { int t; cin >> t; while(t--){ solve(); } return 0; }