#include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair pii; #define Rep(i,a,b) for(register int i=(a);i<=int(b);++i) #define Dep(i,a,b) for(register int i=(a);i>=int(b);--i) #define rep(i,a,b) for(register int i=(a);i%d\n",i,j); pii tmp = dfs(j); c1 += tmp.fi; c2 += tmp.se; }return make_pair(c1,c2); } pii w; void solve(){ n = read(),s = read(); Rep(i,1,n) deg[i] = 0; Rep(i,2,n){ Rep(j,1,i-1){ char ch = getchar(); while(ch!='0'&&ch!='1') ch=getchar(); a[i][j]=a[j][i]=ch-'0'; if(a[i][j]==0) deg[i]++,deg[j]++; } } // Rep(i,1,n) printf("%d ",deg[i]);puts(""); Rep(i,1,n) vis[i] = false; w = dfs(s);w.se/=2; // puts("~~~~~~~~~~~"); // wri(w.fi),writeln(w.se); // puts("~~~~~~~~~~~"); if((w.fi!=2&&w.fi!=0)){ puts("-1");return ; } if(w.fi==2 && deg[s]%2==0){ puts("-1");return ; } int ans = w.se; Rep(i,1,n) if(!vis[i]){ // printf("[%d]\n",i); w = dfs(i);w.se/=2; // printf("{%d %d}\n",w.fi,w.se); if(w.fi!=0){ puts("-1");return ; } if(w.se) ans += w.se + 2; }writeln(ans); } int main(){ int T = read(); while(T--){ solve(); } }