#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <memory>
#include <limits>
using namespace std;
#define INF 0x7fffffff
#define MAXN 5
int mat[MAXN][MAXN];
void leftblank(int row, int col)
{
int start = col;
while(mat[row][start] != 0) //find zero
start++;
for (int i = start + 1; i < 4; ++i) //remove
if (mat[row][i] != 0)
swap(mat[row][start++], mat[row][i]);
}
void left()
{
for (int i = 0; i < 4; ++i)
{
leftblank(i, 0);
for (int j = 0; j < 3; ++j)
{
if (mat[i][j] == 0) break;
else if (mat[i][j] == mat[i][j + 1])
{
mat[i][j] += mat[i][j + 1];
mat[i][j + 1] = 0;
leftblank(i, j + 1);
}
}
}
}
void rightblank(int row, int col)
{
int start = col;
while (mat[row][start] != 0) //find zero
start--;
for (int i = start - 1; i >= 0; --i) //remove
if (mat[row][i] != 0)
swap(mat[row][start--], mat[row][i]);
}
void right()
{
for (int i = 0; i < 4; ++i)
{
rightblank(i, 3);
for (int j = 3; j > 0; --j)
{
if (mat[i][j] == 0) break;
else if (mat[i][j] == mat[i][j - 1])
{
mat[i][j] += mat[i][j-1];
mat[i][j-1] = 0;
rightblank(i, j-1);
}
}
}
}
void upblank(int row, int col)
{
int start = row;
while (mat[start][col] != 0) //find zero
start++;
for (int i = start + 1; i < 4; ++i) //remove
if (mat[i][col] != 0)
swap(mat[start++][col], mat[i][col]);
}
void up()
{
for (int j = 0; j < 4; ++j)
{
upblank(0, j);
for (int i = 0; i < 3; ++i)
{
if (mat[i][j] == 0) break;
else if (mat[i][j] == mat[i+1][j])
{
mat[i][j] += mat[i+1][j];
mat[i+1][j] = 0;
upblank(i + 1, j);
}
}
}
}
void downblank(int row, int col)
{
int start = row;
while (mat[start][col] != 0) //find zero
start--;
for (int i = start - 1; i >= 0; --i) //remove
if (mat[i][col] != 0)
swap(mat[start--][col], mat[i][col]);
}
void down()
{
for (int j = 0; j < 4; ++j)
{
downblank(3, j);
for (int i = 3; i > 0; --i)
{
if (mat[i][j] == 0) break;
else if (mat[i][j] == mat[i - 1][j])
{
mat[i][j] += mat[i - 1][j];
mat[i - 1][j] = 0;
downblank(i - 1, j);
}
}
}
}
int _tmain(int argc, TCHAR *argv[])
{
for (int i = 0; i < 4; ++i)
for (int j = 0; j < 4; ++j)
cin >> mat[i][j];
int d;
cin >> d;
switch (d)
{
case 0:
left();
break;
case 1:
up();
break;
case 2:
down();
break;
case 3:
right();
break;
default:
break;
}
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j)
printf("%d", mat[i][j]);
printf("\n");
}
getchar();
return 0;
}