深搜
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int num[10], a[10] ,vis[10],ans[10];int k,flag;void dfs(int x){int i,j;if(x==k){flag++;for(i=0;i<8;i++)ans[i]=num[i];return ;}if(flag>1)return ;for(j=1;j<=8;j++){if(vis[j])continue;if(a[x]==0){if(abs(j-num[1])==1||abs(j-num[3])==1||abs(j-num[2])==1)continue;}if(a[x]==1){if(abs(j-num[0])==1||abs(j-num[2])==1||abs(j-num[4])==1||abs(j-num[5])==1)continue;}if(a[x]==2){if(abs(j-num[0])==1||abs(j-num[1])==1||abs(j-num[3])==1||abs(j-num[4])==1||abs(j-num[5])==1||abs(j-num[6])==1)continue;}if(a[x]==3){if(abs(j-num[0])==1||abs(j-num[2])==1||abs(j-num[5])==1||abs(j-num[6])==1)continue;}if(a[x]==4){if(abs(j-num[1])==1||abs(j-num[2])==1||abs(j-num[5])==1||abs(j-num[7])==1)continue;}if(a[x]==5){if(abs(j-num[2])==1||abs(j-num[1])==1||abs(j-num[4])==1||abs(j-num[7])==1||abs(j-num[6])==1||abs(j-num[3])==1)continue;}if(a[x]==6){if(abs(j-num[3])==1||abs(j-num[2])==1||abs(j-num[5])==1||abs(j-num[7])==1)continue;}if(a[x]==7){if(abs(j-num[4])==1||abs(j-num[5])==1||abs(j-num[6])==1)continue;}num[a[x]]=j;vis[j]=1;dfs(x+1);num[a[x]]=-1;vis[j]=0;}}int main(){int i;int t;int count=1;cin>>t;while(t--){k=0;memset(vis,0,sizeof(vis));for(i=0;i<8;i++){cin>>num[i];if(num[i]==0){a[k++]=i;num[i]=-1;//注意此處 }elsevis[num[i]]=1;}printf("Case %d: ",count++);flag=0;dfs(0);if(flag==1){printf("%d",ans[0]);for(i=1;i<8;i++)printf(" %d",ans[i]);cout<<endl;}else{ if(flag==0)cout<<"No answer"<<endl;elsecout<<"Not unique"<<endl;}}return 0;}