#include <bits/stdc++.h>
using namespace std;
#define all(v) (v).begin(), (v).end()
vector<int> sumrow(5), sumcol(5);
bitset<32> visited(0);
vector<int> idxRow, idxCol;
int result[7][7];
int ans[7][7];
void sort_idx(vector<int> &idx, vector<int> &v)
{
idx.resize(v.size());
iota(all(idx), 0);
stable_sort(all(idx), [&](const int &i1, const int &i2) { return v[i1] < v[i2]; });
}
inline void printResult()
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
printf("%d ", ans[i][j]);
}
printf("\n");
}
}
bool stop = false;
void solution(int k)
{
if(stop) return;
if(k == 25)
{
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
int oldX = idxRow[i];
int oldY = idxCol[j];
ans[oldX][oldY] = result[i][j];
}
}
printResult();
stop = true;
return;
}
int x = k / 5;
int y = k % 5;
int L = 1, R = 25;
int c1 = sumrow[x];
int c2 = sumcol[y];
if(y == 4) L = R = c1;
else if(x == 4)
L = R = c2;
else
{
int a1 = 0, a2 = 0;
int b1 = 0, b2 = 0;
int maxx = max(5 - (x + 1), 5 - (y + 1));
for(int i = 25, cnt1 = 0, cnt2 = 0; i >= 1 && cnt1 < maxx && cnt2 < maxx; --i)
{
if(!visited.test(i))
{
if(cnt1 < 5 - (x + 1))
{
b2 += i;
++cnt1;
}
if(cnt2 < 5 - (y + 1))
{
a2 += i;
++cnt2;
}
}
}
for(int i = 1, cnt1 = 0, cnt2 = 0; i <= 25 && cnt1 < maxx && cnt2 < maxx; ++i)
{
if(!visited.test(i))
{
if(cnt1 < 5 - (x + 1))
{
b1 += i;
++cnt1;
}
if(cnt2 < 5 - (y + 1))
{
a1 += i;
++cnt2;
}
}
}
L = max({1, c1 - a2, c2 - b2});
R = min({25, c1 - a1, c2 - b1});
}
if(L > 25 || R < 1 || L > R) return;
for(int i = L; i <= R; ++i)
{
if(!visited.test(i))
{
visited.set(i);
sumcol[y] -= i;
sumrow[x] -= i;
result[x][y] = i;
solution(k + 1);
if(stop) return;
visited.reset(i);
sumcol[y] += i;
sumrow[x] += i;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
for(int i = 0; i < 5; i++) scanf("%d", &sumrow[i]);
for(int i = 0; i < 5; i++) scanf("%d", &sumcol[i]);
sort_idx(idxRow, sumrow);
sort_idx(idxCol, sumcol);
sort(all(sumrow));
sort(all(sumcol));
solution(0);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKHYpICh2KS5iZWdpbigpLCAodikuZW5kKCkKCnZlY3RvcjxpbnQ+IHN1bXJvdyg1KSwgc3VtY29sKDUpOwpiaXRzZXQ8MzI+IHZpc2l0ZWQoMCk7CnZlY3RvcjxpbnQ+IGlkeFJvdywgaWR4Q29sOwppbnQgcmVzdWx0WzddWzddOwppbnQgYW5zWzddWzddOwoKdm9pZCBzb3J0X2lkeCh2ZWN0b3I8aW50PiAmaWR4LCB2ZWN0b3I8aW50PiAmdikKewogICAgaWR4LnJlc2l6ZSh2LnNpemUoKSk7CiAgICBpb3RhKGFsbChpZHgpLCAwKTsKICAgIHN0YWJsZV9zb3J0KGFsbChpZHgpLCBbJl0oY29uc3QgaW50ICZpMSwgY29uc3QgaW50ICZpMikgeyByZXR1cm4gdltpMV0gPCB2W2kyXTsgfSk7Cn0KCmlubGluZSB2b2lkIHByaW50UmVzdWx0KCkKewogICAgZm9yKGludCBpID0gMDsgaSA8IDU7IGkrKykKICAgIHsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCBhbnNbaV1bal0pOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9Cn0KYm9vbCBzdG9wID0gZmFsc2U7CnZvaWQgc29sdXRpb24oaW50IGspCnsKICAgIGlmKHN0b3ApIHJldHVybjsKICAgIGlmKGsgPT0gMjUpCiAgICB7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDU7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCA1OyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBvbGRYID0gaWR4Um93W2ldOwogICAgICAgICAgICAgICAgaW50IG9sZFkgPSBpZHhDb2xbal07CiAgICAgICAgICAgICAgICBhbnNbb2xkWF1bb2xkWV0gPSByZXN1bHRbaV1bal07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcHJpbnRSZXN1bHQoKTsKICAgICAgICBzdG9wID0gdHJ1ZTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaW50IHggPSBrIC8gNTsKICAgIGludCB5ID0gayAlIDU7CgogICAgaW50IEwgPSAxLCBSID0gMjU7CiAgICBpbnQgYzEgPSBzdW1yb3dbeF07CiAgICBpbnQgYzIgPSBzdW1jb2xbeV07CiAgICBpZih5ID09IDQpIEwgPSBSID0gYzE7CiAgICBlbHNlIGlmKHggPT0gNCkKICAgICAgICBMID0gUiA9IGMyOwogICAgZWxzZQogICAgewogICAgICAgIGludCBhMSA9IDAsIGEyID0gMDsKICAgICAgICBpbnQgYjEgPSAwLCBiMiA9IDA7CiAgICAgICAgaW50IG1heHggPSBtYXgoNSAtICh4ICsgMSksIDUgLSAoeSArIDEpKTsKICAgICAgICBmb3IoaW50IGkgPSAyNSwgY250MSA9IDAsIGNudDIgPSAwOyBpID49IDEgJiYgY250MSA8IG1heHggJiYgY250MiA8IG1heHg7IC0taSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCF2aXNpdGVkLnRlc3QoaSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGNudDEgPCA1IC0gKHggKyAxKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBiMiArPSBpOwogICAgICAgICAgICAgICAgICAgICsrY250MTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGNudDIgPCA1IC0gKHkgKyAxKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhMiArPSBpOwogICAgICAgICAgICAgICAgICAgICsrY250MjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IoaW50IGkgPSAxLCBjbnQxID0gMCwgY250MiA9IDA7IGkgPD0gMjUgJiYgY250MSA8IG1heHggJiYgY250MiA8IG1heHg7ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCF2aXNpdGVkLnRlc3QoaSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGNudDEgPCA1IC0gKHggKyAxKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBiMSArPSBpOwogICAgICAgICAgICAgICAgICAgICsrY250MTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGNudDIgPCA1IC0gKHkgKyAxKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhMSArPSBpOwogICAgICAgICAgICAgICAgICAgICsrY250MjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBMID0gbWF4KHsxLCBjMSAtIGEyLCBjMiAtIGIyfSk7CiAgICAgICAgUiA9IG1pbih7MjUsIGMxIC0gYTEsIGMyIC0gYjF9KTsKICAgIH0KICAgIGlmKEwgPiAyNSB8fCBSIDwgMSB8fCBMID4gUikgcmV0dXJuOwoKICAgIGZvcihpbnQgaSA9IEw7IGkgPD0gUjsgKytpKQogICAgewogICAgICAgIGlmKCF2aXNpdGVkLnRlc3QoaSkpCiAgICAgICAgewogICAgICAgICAgICB2aXNpdGVkLnNldChpKTsKICAgICAgICAgICAgc3VtY29sW3ldIC09IGk7CiAgICAgICAgICAgIHN1bXJvd1t4XSAtPSBpOwogICAgICAgICAgICByZXN1bHRbeF1beV0gPSBpOwoKICAgICAgICAgICAgc29sdXRpb24oayArIDEpOwoKICAgICAgICAgICAgaWYoc3RvcCkgcmV0dXJuOwogICAgICAgICAgICB2aXNpdGVkLnJlc2V0KGkpOwogICAgICAgICAgICBzdW1jb2xbeV0gKz0gaTsKICAgICAgICAgICAgc3Vtcm93W3hdICs9IGk7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSBzY2FuZigiJWQiLCAmc3Vtcm93W2ldKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHNjYW5mKCIlZCIsICZzdW1jb2xbaV0pOwoKICAgIHNvcnRfaWR4KGlkeFJvdywgc3Vtcm93KTsKICAgIHNvcnRfaWR4KGlkeENvbCwgc3VtY29sKTsKCiAgICBzb3J0KGFsbChzdW1yb3cpKTsKICAgIHNvcnQoYWxsKHN1bWNvbCkpOwoKICAgIHNvbHV0aW9uKDApOwoKICAgIHJldHVybiAwOwp9