#include #include #include #include #include #include using namespace std; long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ assert(cnt>0); if(is_neg){ x= -x; } assert(l<=x && x<=r); return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } vector adj[1010]; vector cst[1010]; int n; int b[1010][1010]; int a[1010][1010]; bool vis[1101]; int ty[1011]; int col[1111]; bool error=false; void dfs(int nd,int type,int colum){ vis[nd]=true; ty[nd]=type; col[nd]=colum; for(int i=0;i>T; int cn=0; while(T--){ cn++; error=false; n=readIntLn(2,1000); //cin>>n; sm_n+=n; assert(sm_n<=1000); for(int i=1;i<=n;i++){ adj[i].clear(); cst[i].clear(); vis[i]=false; for(int j=1;j<=n;j++){ a[i][j] =0; if(j==n){ b[i][j] = readIntLn(-1,1); } else { b[i][j] = readIntSp(-1,1); } //cin>>b[i][j]; } } for(int i=1;i<=n;i++){ if(b[i][i] == -1){ error=true; } for(int j=1;j<=n;j++){ if(i==j)continue; if(b[i][j] != b[j][i]){ error=true; } if(b[i][j] != 0){ if(b[i][i] == 0){ error=true; } if(b[j][j] == 0){ error=true; } } if(b[i][j] != 0){ adj[i].push_back(j); cst[i].push_back(b[i][j]); } } } int cl=1; for(int i=1;i<=n;i++){ if(b[i][i] ==0)continue; if(vis[i])continue; dfs(i,-1,cl); cl++; } for(int i=1;i<=n;i++){ if(b[i][i] == 0)continue; for(int j=i+1;j<=n;j++){ if(b[j][j] == 0)continue; if(col[i] == col[j]){ if(b[i][j] != ty[i] * ty[j]){ error=true; } } else { if(b[i][j] != 0){ error=true; } } } } for(int i=1;i<=n;i++){ if(b[i][i] ==0)continue; a[i][col[i]]=ty[i]; } if(error){ cout<<-1<