#include #include #include #include #include #include #include #include using namespace std; // //int T; //bool vis[15]; //bool has[15]; //int a[15]; // // // //int main() { // freopen("in.txt","r",stdin); // scanf("%d",&T); // while(T --) { // int n; // scanf("%d",&n); // memset(vis,0,sizeof(vis)); // memset(has,0,sizeof(has)); // bool ok = true; // for(int i = 0;i < n;i ++) { // scanf("%d",&a[i]); // if(a[i] >= 10 || a[i] <= 0) { // ok = false; // } // if(!ok) { // continue; // } // if(has[a[i]] == true) { // ok = false; // } // has[a[i]] = true; // } // // if(n < 4 || !ok || n >= 10) { // puts("invalid"); // continue; // } // // vis[a[0]] = true; // for(int i = 1;i < n;i ++) { // int prex = (a[i - 1] + 2) / 3 - 1; // int prey = (a[i - 1] + 2) % 3; // int curx = (a[i] + 2) / 3 - 1; // int cury = (a[i] + 2) % 3; // int inx = (prex + curx) / 2; // int iny = (prey + cury) / 2; // if((prex + curx % 2 == 0) && (prey + cury % 2 == 0) && // !(inx == prex && iny == prey || inx == curx && iny == cury)) { // if(vis[inx * 3 + iny + 1] == false) { // ok = false; // break; // } // } // vis[a[i]] = true; // } // if(ok) { // puts("valid"); // } // else { // puts("invalid"); // } // } //} int T; int a[15]; bool has[15]; bool vis[15]; int f(int pre,int cur) { // if(pre == 1 && cur == 3) return 2; // if(pre == 4 && cur == 6) return 6; // if(pre == 7 && cur == 9) return 8; // if(pre == 1 && cur == 7) return 4; // if(pre == 2 && cur == 8) return 5; // if(pre == 3 && cur == 9) return 6; if(pre == 1 && cur == 9) return 5; if(pre == 3 && cur == 7) return 5; if(pre <= 3 && cur == pre + 6) return (pre + cur) / 2; if(pre % 3 == 1 && cur == pre + 2) return (pre + cur) / 2; return -1; } int main() { // freopen("in.txt","r",stdin); scanf("%d",&T); while(T --) { int n; scanf("%d",&n); memset(has,0,sizeof(has)); memset(vis,0,sizeof(vis)); bool ok = true; for(int i = 0;i < n;i ++) { scanf("%d",&a[i]); if(a[i] >= 10 || a[i] <= 0) { ok = false; } // cout << a[i] << endl; if(!ok) continue; if(has[a[i]]) ok = false; has[a[i]] = true; } if(n < 4 || !ok) { puts("invalid"); continue; } vis[a[0]] = true; for(int i = 1;i < n;i ++) { int pre = a[i - 1]; int cur = a[i]; int mid = f(min(pre,cur),max(pre,cur)); if(mid != -1 && mid != pre && mid != cur) { if(vis[mid] == false) { ok = false; break; } } vis[a[i]] = true; } if(ok) { puts("valid"); } else { puts("invalid"); } } }