#include using namespace std; typedef pair P; int dx[4]={-1,1,0,0}; int dy[4]={0,0,-1,1}; int A[4][4]; int S[4][4]; void solve(int gx,int gy){ queue

que; int k=1; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ S[i][j]=k; k++; } } S[3][3]=0; que.push({3,3}); while(!que.empty()){ P q=que.front(); que.pop(); int x=q.first; int y=q.second; if(A[x][y]==0&&S[x][y]==0){ break; } bool flag=false; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ int nx=x+dx[i]; int ny=y+dy[j]; if(nx<0||ny<0||nx>3||ny>3) continue; if(A[x][y]==S[nx][ny]){ flag=true; que.push({nx,ny}); S[x][y]=A[x][y]; S[nx][ny]=0; break; } } if(flag) break; } } } int main(){ int gx,gy; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ cin >> A[i][j]; if(A[i][j]==0){ gx=i,gy=j; } } } solve(gx,gy); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(S[i][j]!=A[i][j]){ cout << "No" << endl; return 0; } } } cout << "Yes" << endl; }