#include #include #include #include //#include #include #include #include #include #include //#include #include #include #include //#include #include #include //#include #include #include #include const int dx[] = {1, 0, -1, 0}; const int dy[] = {0, 1, 0, -1}; using namespace std; typedef long long ll; typedef vector vi; typedef vector vll; typedef pair pii; typedef complex C; int board[4][4]; bool used[16]; int y, x; bool ok() { for (int i = 0; i < 15; i++) { if (board[i/4][i%4] != i+1) return false; } return true; } bool dfs(int state) { if (ok()) return true; for (int i = 0; i < 4; i++) { int ny = y+dy[i]; int nx = x+dx[i]; if (ny < 0 || ny >= 4 || nx < 0 || nx >= 4) continue; int tmp = board[ny][nx]; if ((state>>tmp)&1) continue; int ns = state|(1<> board[i][j]; if (board[i][j] == 0) y = i, x = j; } if (dfs(0)) cout << "Yes" << endl; else cout << "No" << endl; return 0; }