#include <bits/stdc++.h>
using namespace std;
#define rep(i, j) for (int i = 0; i < 4; i++)\
for (int j = 0; j < 4; j++)
typedef array<array<int, 4>, 4> board;
board flip(board a, bool z = 1) {
board b;
rep(i, j) {
if (z) b[i][j] = a[j][i];
else b[i][j] = a[3 - j][3 - i];
}
return b;
}
board dir(board a, char c) {
if (c == 'U') return a;
if (c == 'L') return flip(a);
if (c == 'R') return flip(a, 0);
return flip(flip(a, 0));
}
board move(board a, char c) {
a = dir(a, c);
rep(j, i) {
if (a[i][j] == 0) continue;
for (int k = i + 1; k < 4; k++) {
if (a[k][j] == 0) continue;
if (a[i][j] == a[k][j]) {
a[i][j] *= -2;
a[k][j] = 0;
}
break;
}
}
rep(i, j) if (a[i][j] < 0) a[i][j] = -a[i][j];
rep(j, i) {
if (a[i][j] > 0) continue;
for (int k = i + 1; k < 4; k++) {
if (a[k][j] > 0) {
a[i][j] = a[k][j];
a[k][j] = 0;
break;
}
}
}
a = dir(a, c);
return a;
}
int main() {
board x;
x[0][0]=8;
x[0][1]=0;
x[0][2]=0;
x[0][3]=0;
x[1][0]=0;
x[1][1]=2;
x[1][2]=4;
x[1][3]=0;
x[2][0]=0;
x[2][1]=2;
x[2][2]=4;
x[2][3]=0;
x[3][0]=0;
x[3][1]=8;
x[3][2]=0;
x[3][3]=0;
char moveup='U';
x = move(x,moveup);;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cout << x[i][j] << " ";
}
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHJlcChpLCBqKSBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKylcCglmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKCnR5cGVkZWYgYXJyYXk8YXJyYXk8aW50LCA0PiwgND4gYm9hcmQ7Cgpib2FyZCBmbGlwKGJvYXJkIGEsIGJvb2wgeiA9IDEpIHsKCWJvYXJkIGI7CglyZXAoaSwgaikgewoJCWlmICh6KSBiW2ldW2pdID0gYVtqXVtpXTsKCQllbHNlIGJbaV1bal0gPSBhWzMgLSBqXVszIC0gaV07Cgl9CglyZXR1cm4gYjsKfQoKYm9hcmQgZGlyKGJvYXJkIGEsIGNoYXIgYykgewoJaWYgKGMgPT0gJ1UnKSByZXR1cm4gYTsKCWlmIChjID09ICdMJykgcmV0dXJuIGZsaXAoYSk7CglpZiAoYyA9PSAnUicpIHJldHVybiBmbGlwKGEsIDApOwoJcmV0dXJuIGZsaXAoZmxpcChhLCAwKSk7Cn0KCmJvYXJkIG1vdmUoYm9hcmQgYSwgY2hhciBjKSB7CglhID0gZGlyKGEsIGMpOwoJcmVwKGosIGkpIHsKCQlpZiAoYVtpXVtqXSA9PSAwKSBjb250aW51ZTsKCQlmb3IgKGludCBrID0gaSArIDE7IGsgPCA0OyBrKyspIHsKCQkJaWYgKGFba11bal0gPT0gMCkgY29udGludWU7CgkJCWlmIChhW2ldW2pdID09IGFba11bal0pIHsKCQkJCWFbaV1bal0gKj0gLTI7CgkJCQlhW2tdW2pdID0gMDsKCQkJfQoJCQlicmVhazsKCQl9Cgl9CglyZXAoaSwgaikgaWYgKGFbaV1bal0gPCAwKSBhW2ldW2pdID0gLWFbaV1bal07CglyZXAoaiwgaSkgewoJCWlmIChhW2ldW2pdID4gMCkgY29udGludWU7CgkJZm9yIChpbnQgayA9IGkgKyAxOyBrIDwgNDsgaysrKSB7CgkJCWlmIChhW2tdW2pdID4gMCkgewoJCQkJYVtpXVtqXSA9IGFba11bal07CgkJCQlhW2tdW2pdID0gMDsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoJYSA9IGRpcihhLCBjKTsKCXJldHVybiBhOwp9CgppbnQgbWFpbigpIHsKCQoJYm9hcmQgeDsKCXhbMF1bMF09ODsKCXhbMF1bMV09MDsKCXhbMF1bMl09MDsKCXhbMF1bM109MDsKCXhbMV1bMF09MDsKCXhbMV1bMV09MjsKCXhbMV1bMl09NDsKCXhbMV1bM109MDsKCXhbMl1bMF09MDsKCXhbMl1bMV09MjsKCXhbMl1bMl09NDsKCXhbMl1bM109MDsKCXhbM11bMF09MDsKCXhbM11bMV09ODsKCXhbM11bMl09MDsKCXhbM11bM109MDsKCWNoYXIgbW92ZXVwPSdVJzsKCXggPSBtb3ZlKHgsbW92ZXVwKTs7Cglmb3IoaW50IGk9MDtpPDQ7aSsrKXsKCQlmb3IoaW50IGo9MDtqPDQ7aisrKXsKCQkJY291dCA8PCB4W2ldW2pdIDw8ICIgIjsJCgkJfQoJCWNvdXQgPDwgZW5kbDsKCX0KCXJldHVybiAwOwp9