//#include #include //#include //#include //#include //#define LL long long //#define INF 1000000007 //------------------------------------------------------------ //struct P{}; //------------------------------------------------------------ //void Max(int &num1,int num2) { if (num1num2) num1=num2; } //int Min(int num1,int num2) { return num1 0 ? a : -a; } //------------------------------------------------------------ int tcase; int icase; int n,m; int i,j,k; int a[1000]; int used[100]; int che[30][30]; int dx1,dx2,dx3; int dy1,dy2,dy3; bool flag; //------------------------------------------------------------ int main( ) { for (scanf("%d",&tcase); ++icase<=tcase; ) { //--0 init flag=true; scanf("%d",&n); for (i=1; i<=9; i++) used[i]=0; for (i=1; i<=3; i++) for (j=1; j<=3; j++) che[i][j]=0; for (i=1; i<=n; i++) scanf("%d",&a[i]); //--1 check 1 for (i=1; i<=n; i++) { if (a[i]>9||a[i]<1) flag=false; else if (used[a[i]]) break; else used[a[i]]=1; } if (i<=n) flag=false; if (n<=3) flag=false; //--2 check 2 if (flag) for (i=1; i< n; i++) { dx1=(a[i]+2)/3; dy1=(a[i]-1)%3+1; che[dx1][dy1]=1; dx2=(a[i+1]+2)/3; dy2=(a[i+1]-1)%3+1; if (dx1==dx2||dy1==dy2|| Abs(dx1-dx2)==Abs(dy1-dy2)) { if (Abs(dy1-dy2)>1||Abs(dx1-dx2)>1) { dx3=(dx1+dx2)/2; dy3=(dy1+dy2)/2; if (!che[dx3][dy3]) flag=false; } } } //--3 print if (flag) printf("valid\n"); else printf("invalid\n"); } }