#include #include #include #include #include #include #include #include #include #include #define INF 99999999 using namespace std; const int MAX=10+10; bool mark[MAX]; int s[MAX],p[MAX],pos[MAX],num; bool panduan(int Pos,int x){ if(Pos == 0)if(abs(p[1]-x) == 1 || abs(p[2]-x) == 1 || abs(p[3]-x) == 1)return false; if(Pos == 1)if(abs(p[0]-x) == 1 || abs(p[2]-x) == 1 || abs(p[4]-x) == 1 || abs(p[5]-x) == 1)return false; if(Pos == 2)if(abs(p[0]-x) == 1 || abs(p[1]-x) == 1 || abs(p[3]-x) == 1 || abs(p[4]-x) == 1 || abs(p[5]-x) == 1 || abs(p[6]-x) == 1)return false; if(Pos == 3)if(abs(p[0]-x) == 1 || abs(p[2]-x) == 1 || abs(p[5]-x) == 1 || abs(p[6]-x) == 1)return false; if(Pos == 4)if(abs(p[1]-x) == 1 || abs(p[2]-x) == 1 || abs(p[5]-x) == 1 || abs(p[7]-x) == 1)return false; if(Pos == 5)if(abs(p[1]-x) == 1 || abs(p[2]-x) == 1 || abs(p[3]-x) == 1 || abs(p[4]-x) == 1 || abs(p[6]-x) == 1 || abs(p[7]-x) == 1)return false; if(Pos == 6)if(abs(p[2]-x) == 1 || abs(p[3]-x) == 1 || abs(p[5]-x) == 1 || abs(p[7]-x) == 1)return false; if(Pos == 7)if(abs(p[4]-x) == 1 || abs(p[5]-x) == 1 || abs(p[6]-x) == 1)return false; return true; } void dfs(int Pos){ if(Pos>pos[0]){ ++num; if(num == 1){ for(int i=0;i<8;++i)pos[pos[0]+1+i]=p[i]; } return; } for(int i=1;i<=s[0];++i){ if(mark[s[i]])continue; if(panduan(pos[Pos],s[i])){ p[pos[Pos]]=s[i]; mark[s[i]]=true; dfs(Pos+1); p[pos[Pos]]=10; mark[s[i]]=false; if(num>1)return; } } } int main(){ int t,Case=0; cin>>t; while(t--){ memset(mark,false,sizeof mark); num=pos[0]=s[0]=0; for(int i=0;i<8;++i){ cin>>p[i]; if(p[i] == 0)pos[++pos[0]]=i,p[i]=10; mark[p[i]]=true; } for(int i=1;i<=8;++i)if(!mark[i])s[++s[0]]=i; if(pos[0]>0)dfs(1); cout<<"Case "<<++Case<<':'; if(!num)cout<<" No answer"<1)cout<<" Not unique"<