#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
int korx1[10],kory1[10],start[10],data[5][5],i,j,VISITED[10][10],maks;
vector<int> angka;
bool full(){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(VISITED[i][j]==0) return false;
}
}
return true;
}
void print(){
int i,j;
printf("\n");
for(i=0;i<4;i++){
for(j=0;j<4;j++){
printf("%d",data[i][j]);
}
printf("\n");
}
}
int isValid(int x,int y,int z){
int valid=0;
if((z==maks)&&(VISITED[x][y]==angka[maks]+5)&&full()) {
//print();
return 1;
}
if((z==maks)&&(VISITED[x][y]==angka[maks]+5)) return 0;
if (VISITED[x][y]==angka[z]+5) return isValid(korx1[angka[z+1]],kory1[angka[z+1]],z+1);
if (x<0 || x>=4 || y<0 || y>=4) return 0;
if (VISITED[x][y]!=0) return 0;
VISITED[x][y]=15;
data[x][y]=angka[z];
valid=valid | isValid(x+1,y,z);
valid=valid | isValid(x-1,y,z);
valid=valid | isValid(x,y+1,z);
valid=valid | isValid(x,y-1,z);
VISITED[x][y]=0;
return valid;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
maks=0;
memset(start,0, sizeof(start));
memset(VISITED,0,sizeof VISITED);
for(i=0;i<4;i++){
for(j=0;j<4;j++){
scanf("%d",&data[i][j]);
//maks=max(maks,data[i][j]);
if ((data[i][j]!=0) && (start[data[i][j]]==0)){
korx1[data[i][j]]=i;
kory1[data[i][j]]=j;
start[data[i][j]]=1;
}
else if (data[i][j]&&start[data[i][j]]==1) {
VISITED[i][j]=data[i][j]+5;
angka.push_back(data[i][j]);
}
else VISITED[i][j]=data[i][j];
}
}
maks=angka.size()-1;
//printf("%d\n",maks);
sort(angka.begin(),angka.end());
/*for(int a=0;a<=maks;a++) printf("%d ",angka[a]);
printf("\n");
printf("\n");
print();
printf("\n");*/
int bisa=isValid(korx1[angka[0]],kory1[angka[0]],0);
if(bisa) printf("SOLVABLE\n");
else printf("UNSOLVABLE\n");
//print();
angka.clear();
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzdHJpbmcuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGtvcngxWzEwXSxrb3J5MVsxMF0sc3RhcnRbMTBdLGRhdGFbNV1bNV0saSxqLFZJU0lURURbMTBdWzEwXSxtYWtzOwp2ZWN0b3I8aW50PiBhbmdrYTsKYm9vbCBmdWxsKCl7CiAgICBmb3IoaW50IGk9MDtpPDQ7aSsrKXsKICAgICAgICBmb3IoaW50IGo9MDtqPDQ7aisrKXsKICAgICAgICAgICAgaWYoVklTSVRFRFtpXVtqXT09MCkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwp9CnZvaWQgcHJpbnQoKXsKCWludCBpLGo7CglwcmludGYoIlxuIik7Cglmb3IoaT0wO2k8NDtpKyspewoJCWZvcihqPTA7ajw0O2orKyl7CiAgICAgICAgICAgIHByaW50ZigiJWQiLGRhdGFbaV1bal0pOwoJCX0KCQlwcmludGYoIlxuIik7Cgl9Cn0KaW50IGlzVmFsaWQoaW50IHgsaW50IHksaW50IHopewogICAgICAgIGludCB2YWxpZD0wOwogICAgICAgIGlmKCh6PT1tYWtzKSYmKFZJU0lURURbeF1beV09PWFuZ2thW21ha3NdKzUpJiZmdWxsKCkpIHsKICAgICAgICAgICAgICAgIC8vcHJpbnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBpZigoej09bWFrcykmJihWSVNJVEVEW3hdW3ldPT1hbmdrYVttYWtzXSs1KSkgcmV0dXJuIDA7CiAgICAgICAgaWYgKFZJU0lURURbeF1beV09PWFuZ2thW3pdKzUpIHJldHVybiBpc1ZhbGlkKGtvcngxW2FuZ2thW3orMV1dLGtvcnkxW2FuZ2thW3orMV1dLHorMSk7CiAgICAgICAgaWYgKHg8MCB8fCB4Pj00IHx8IHk8MCB8fCB5Pj00KSByZXR1cm4gMDsKICAgICAgICBpZiAoVklTSVRFRFt4XVt5XSE9MCkgcmV0dXJuIDA7CiAgICAgICAgVklTSVRFRFt4XVt5XT0xNTsKICAgICAgICBkYXRhW3hdW3ldPWFuZ2thW3pdOwogICAgICAgIHZhbGlkPXZhbGlkIHwgaXNWYWxpZCh4KzEseSx6KTsKICAgICAgICB2YWxpZD12YWxpZCB8IGlzVmFsaWQoeC0xLHkseik7CiAgICAgICAgdmFsaWQ9dmFsaWQgfCBpc1ZhbGlkKHgseSsxLHopOwogICAgICAgIHZhbGlkPXZhbGlkIHwgaXNWYWxpZCh4LHktMSx6KTsKICAgICAgICBWSVNJVEVEW3hdW3ldPTA7CiAgICAgICAgcmV0dXJuIHZhbGlkOwp9CgppbnQgbWFpbigpewogICAgaW50IHQ7CiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIHdoaWxlKHQtLSl7CiAgICAgICAgbWFrcz0wOwogICAgICAgIG1lbXNldChzdGFydCwwLCBzaXplb2Yoc3RhcnQpKTsKICAgICAgICBtZW1zZXQoVklTSVRFRCwwLHNpemVvZiBWSVNJVEVEKTsKICAgICAgICBmb3IoaT0wO2k8NDtpKyspewogICAgICAgICAgICBmb3Ioaj0wO2o8NDtqKyspewogICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwmZGF0YVtpXVtqXSk7CiAgICAgICAgICAgICAgICAvL21ha3M9bWF4KG1ha3MsZGF0YVtpXVtqXSk7CiAgICAgICAgICAgICAgICBpZiAoKGRhdGFbaV1bal0hPTApICYmIChzdGFydFtkYXRhW2ldW2pdXT09MCkpewogICAgICAgICAgICAgICAgICAgIGtvcngxW2RhdGFbaV1bal1dPWk7CiAgICAgICAgICAgICAgICAgICAga29yeTFbZGF0YVtpXVtqXV09ajsKICAgICAgICAgICAgICAgICAgICBzdGFydFtkYXRhW2ldW2pdXT0xOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YVtpXVtqXSYmc3RhcnRbZGF0YVtpXVtqXV09PTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgVklTSVRFRFtpXVtqXT1kYXRhW2ldW2pdKzU7CiAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2thLnB1c2hfYmFjayhkYXRhW2ldW2pdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgVklTSVRFRFtpXVtqXT1kYXRhW2ldW2pdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG1ha3M9YW5na2Euc2l6ZSgpLTE7CiAgICAgICAgLy9wcmludGYoIiVkXG4iLG1ha3MpOwogICAgICAgIHNvcnQoYW5na2EuYmVnaW4oKSxhbmdrYS5lbmQoKSk7CiAgICAgICAgLypmb3IoaW50IGE9MDthPD1tYWtzO2ErKykgcHJpbnRmKCIlZCAiLGFuZ2thW2FdKTsKICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgIHByaW50KCk7CiAgICAgICAgcHJpbnRmKCJcbiIpOyovCiAgICAgICAgaW50IGJpc2E9aXNWYWxpZChrb3J4MVthbmdrYVswXV0sa29yeTFbYW5na2FbMF1dLDApOwogICAgICAgIGlmKGJpc2EpIHByaW50ZigiU09MVkFCTEVcbiIpOwogICAgICAgIGVsc2UgcHJpbnRmKCJVTlNPTFZBQkxFXG4iKTsKICAgICAgICAvL3ByaW50KCk7CiAgICAgICAgYW5na2EuY2xlYXIoKTsKICAgIH0KfQo=