#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);~i;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
//Data
const int N=100,sN=200001;
int n,deg[N],dego[N];
//Math
const int mod=1e6+3;
void fmod(int &x){x+=x>>31&mod;}
int fac[sN];
void init(){
fac[0]=1;
R(i,sN-1) fac[i+1]=1ll*fac[i]*(i+1)%mod;
}
//Matrix
struct Matrix{
int a[N][N];
void clear(){R(i,n)R(j,n) a[i][j]=0;}
int* operator[](int i){return a[i];}
int det(int res=1,int j=-1){
R(i,n)if(i){
for(j=i;j<n;j++)if(a[j][i]) break;
if(j==n) return 0;
if(i!=j){
for(int t=i;t<n;t++) swap(a[i][t],a[j][t]);
res=-res;
}
for(int j=i+1;j<n;j++)while(a[j][i]){
int d=a[j][i]/a[i][i];
for(int t=i;t<n;t++) fmod(a[j][t]-=1ll*a[i][t]*d%mod);
if(!a[j][i]) break;
for(int t=i;t<n;t++) swap(a[i][t],a[j][t]);
res=-res;
}
}
fmod(res);
R(i,n) i&&(res=1ll*res*a[i][i]%mod);
return res;
}
}e;
//Main
void Main(){
cin>>n,e.clear();
R(u,n) deg[u]=0;
R(u,n){
cin>>dego[u];
R(t,dego[u]){
int v; cin>>v,--v,deg[v]++;
e[u][v]--;
}
}
if(n==1) return void(cout<<1<<'\n');
// cout<<"imal\n";
int ns=deg[0];
R(u,n){
if(deg[u]!=dego[u]) return void(cout<<0<<'\n');
if(deg[u]==0) return void(cout<<0<<'\n');
e[u][u]+=deg[u],ns=1ll*ns*fac[deg[u]-1]%mod;
}
R(i,n)R(j,n) fmod(e[i][j]);
ns=1ll*ns*e.det()%mod;
cout<<ns<<'\n';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
init();
int T; cin>>T;
while(T--) Main();
return 0;
}