RT
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll t,pos,len;
char mp[10][10];
ll ans,pre[100];
bool check(ll now){
ll tmp[10][10];
for(int i=1;i<=16;i++)tmp[(i-1)/4+1][(i-1)%4+1]=now/pre[16-i]%10;
ll fl[10];
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++)fl[j]=0;
for(int j=1;j<=4;j++)fl[tmp[i][j]]++;
if(!(fl[1]==1&&fl[2]==1&&fl[3]==1&&fl[4]==1))return 0;
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++)fl[j]=0;
for(int j=1;j<=4;j++)fl[tmp[j][i]]++;
if(!(fl[1]==1&&fl[2]==1&&fl[3]==1&&fl[4]==1))return 0;
}
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[1][1]]++,fl[tmp[1][2]]++,fl[tmp[2][1]]++,fl[tmp[2][2]]++;
if(!(fl[1]==1&&fl[2]==1&&fl[3]==1&&fl[4]==1))return 0;
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[1][3]]++,fl[tmp[1][4]]++,fl[tmp[2][3]]++,fl[tmp[2][4]]++;
if(!(fl[1]==1&&fl[2]==1&&fl[3]==1&&fl[4]==1))return 0;
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[3][1]]++,fl[tmp[3][2]]++,fl[tmp[4][1]]++,fl[tmp[4][2]]++;
if(!(fl[1]==1&&fl[2]==1&&fl[3]==1&&fl[4]==1))return 0;
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[3][3]]++,fl[tmp[3][4]]++,fl[tmp[4][3]]++,fl[tmp[4][4]]++;
if(!(fl[1]==1&&fl[2]==1&&fl[3]==1&&fl[4]==1))return 0;
return 1;
}
bool nxt_check(ll now){
ll tmp[10][10];
for(int i=1;i<=16;i++)tmp[(i-1)/4+1][(i-1)%4+1]=now/pre[16-i]%10;
ll fl[10];
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++)fl[j]=0;
for(int j=1;j<=4;j++)fl[tmp[i][j]]++;
if(!(fl[1]<=1&&fl[2]<=1&&fl[3]<=1&&fl[4]<=1))return 0;
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++)fl[j]=0;
for(int j=1;j<=4;j++)fl[tmp[j][i]]++;
if(!(fl[1]<=1&&fl[2]<=1&&fl[3]<=1&&fl[4]<=1))return 0;
}
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[1][1]]++,fl[tmp[1][2]]++,fl[tmp[2][1]]++,fl[tmp[2][2]]++;
if(!(fl[1]<=1&&fl[2]<=1&&fl[3]<=1&&fl[4]<=1))return 0;
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[1][3]]++,fl[tmp[1][4]]++,fl[tmp[2][3]]++,fl[tmp[2][4]]++;
if(!(fl[1]<=1&&fl[2]<=1&&fl[3]<=1&&fl[4]<=1))return 0;
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[3][1]]++,fl[tmp[3][2]]++,fl[tmp[4][1]]++,fl[tmp[4][2]]++;
if(!(fl[1]<=1&&fl[2]<=1&&fl[3]<=1&&fl[4]<=1))return 0;
fl[1]=fl[2]=fl[3]=fl[4]=0;
fl[tmp[3][3]]++,fl[tmp[3][4]]++,fl[tmp[4][3]]++,fl[tmp[4][4]]++;
if(!(fl[1]<=1&&fl[2]<=1&&fl[3]<=1&&fl[4]<=1))return 0;
return 1;
}
void solve(ll now,ll L){
if(ans)return;
if(L==16){
if(check(now))ans=now;
return;
}
for(int i=1;i<=16;i++){
if(now/pre[16-i]%10)continue;
for(int j=1;j<=4;j++)if(nxt_check(now+j*pre[16-i]))solve(now+j*pre[16-i],L+1);
}
return;
}
ll fl_[10];
int main(){
pre[0]=1;
for(int i=1;i<=16;i++)pre[i]=(pre[i-1]<<1)+(pre[i-1]<<3);
cin>>t;
for(int qwq=1;qwq<=t;qwq++){
for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)cin>>mp[i][j];
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++)fl_[j]=0;
for(int j=1;j<=4;j++){
if(mp[i][j]=='*')continue;
fl_[mp[i][j]-'0']++;
}
if(fl_[1]+fl_[2]+fl_[3]+fl_[4]==3){
for(int j=1;j<=4;j++){
if(mp[i][j]=='*'){
for(int k=1;k<=4;k++)if(fl_[k]==0){
mp[i][j]='0'+k;
break;
}
}
}
}
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++)fl_[j]=0;
for(int j=1;j<=4;j++){
if(mp[j][i]=='*')continue;
fl_[mp[j][i]-'0']++;
}
if(fl_[1]+fl_[2]+fl_[3]+fl_[4]==3){
for(int j=1;j<=4;j++){
if(mp[j][i]=='*'){
for(int k=1;k<=4;k++)if(fl_[k]==0){
mp[j][i]='0'+k;
break;
}
}
}
}
}
pos=0,len=0;
for(int i=1;i<=16;i++)pos=pos*10*1ll+1ll*(mp[(i-1)/4+1][(i-1)%4+1]=='*'?0:mp[(i-1)/4+1][(i-1)%4+1]-'0'),len+=(mp[(i-1)/4+1][(i-1)%4+1]!='*');
ans=0;
solve(pos,len);
cout<<"Case #"<<qwq<<":"<<endl<<ans/pre[12]<<endl<<ans/pre[8]%pre[4]<<endl<<ans/pre[4]%pre[4]<<endl<<ans%pre[4]<<endl;
}
return 0;
}