#include<bits/stdc++.h>
using namespace std;

int t,n,a[1010][510],p[510][510],ans,pos;
bool vis[1010];
vector<int> res;
const int mod=998244353;

int main()
{
	cin>>t;
	while(t--){
		memset(vis,false,sizeof(vis));
		memset(p,0,sizeof(p));
		res.clear();
		ans=1;
		cin>>n;
		for(int i=1;i<=2*n;i++)
			for(int j=1;j<=n;j++)
				cin>>a[i][j],p[a[i][j]][j]++;
		for(int i=1;i<=n;i++){
			pos=0;
			for(int j=1;j<=2*n;j++)
				if(vis[j]==false){
					for(int k=1;k<=n;k++)
						if(p[a[j][k]][k]==1){
							pos=j;
							break;
						}
					if(pos>0) break;
				}
			if(pos==0){
				ans=ans*2%mod;
				pos=1;
				while(vis[pos]==true) pos++;
			}
			vis[pos]=true;
			for(int j=1;j<=2*n;j++)
				if(vis[j]==false){
					for(int k=1;k<=n;k++)
						if(a[j][k]==a[pos][k]){
							vis[j]=true;
							break;
						}
					if(vis[j]==true)
						for(int k=1;k<=n;k++)
							p[a[j][k]][k]--;
				}	
			for(int j=1;j<=n;j++) p[a[pos][j]][j]--;
			res.push_back(pos);
		}
		cout<<ans<<'\n';
		for(int i=0;i<res.size();i++) cout<<res[i]<<" ";
		cout<<'\n';
	}
	return 0;
}