#include <bits/stdc++.h>
using namespace std;
struct Dinic {
struct Edge {
int to, rev, cap;
};
int n;
vector<vector<Edge>> g;
vector<int> level, ptr;
Dinic(int n) : n(n), g(n), level(n), ptr(n) {}
void addEdge(int u, int v, int cap) {
Edge a{v, (int)g[v].size(), cap};
Edge b{u, (int)g[u].size(), 0};
g[u].push_back(a);
g[v].push_back(b);
}
bool bfs(int s, int t) {
fill(level.begin(), level.end(), -1);
queue<int> q;
q.push(s);
level[s] = 0;
while (!q.empty()) {
int v = q.front();
q.pop();
for (auto &e : g[v]) {
if (e.cap > 0 && level[e.to] == -1) {
level[e.to] = level[v] + 1;
q.push(e.to);
}
}
}
return level[t] != -1;
}
int dfs(int v, int t, int pushed) {
if (pushed == 0) return 0;
if (v == t) return pushed;
for (int &cid = ptr[v]; cid < (int)g[v].size(); cid++) {
Edge &e = g[v][cid];
if (e.cap <= 0 || level[e.to] != level[v] + 1)
continue;
int tr = dfs(e.to, t, min(pushed, e.cap));
if (tr == 0) continue;
e.cap -= tr;
g[e.to][e.rev].cap += tr;
return tr;
}
return 0;
}
int maxflow(int s, int t, int limit) {
int flow = 0;
while (flow < limit && bfs(s, t)) {
fill(ptr.begin(), ptr.end(), 0);
while (flow < limit) {
int pushed = dfs(s, t, limit - flow);
if (pushed == 0) break;
flow += pushed;
}
}
return flow;
}
};
bool check(int i, int j,
const vector<int> &r,
const vector<int> &c,
int n, int m) {
int need = 0;
for (int x = i; x < n; x++)
need += r[x];
int S = 0;
int rowBase = 1;
int colBase = rowBase + (n - i);
int T = colBase + m;
Dinic dinic(T + 1);
for (int x = i; x < n; x++) {
dinic.addEdge(S, rowBase + x - i, r[x]);
}
for (int y = 0; y < m; y++) {
dinic.addEdge(colBase + y, T, c[y]);
}
for (int x = i; x < n; x++) {
int firstCol = (x == i ? j + 1 : 0);
for (int y = firstCol; y < m; y++) {
if (r[x] == 0 || c[y] == 0)
continue;
dinic.addEdge(
rowBase + x - i,
colBase + y,
1
);
}
}
return dinic.maxflow(S, T, need) == need;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<int> r(n), c(m);
int sumR = 0, sumC = 0;
for (int &x : r) {
cin >> x;
sumR += x;
}
for (int &x : c) {
cin >> x;
sumC += x;
}
if (sumR != sumC) {
cout << -1;
return 0;
}
for (int x : r)
if (x < 0 || x > m) {
cout << -1;
return 0;
}
for (int x : c)
if (x < 0 || x > n) {
cout << -1;
return 0;
}
vector<string> ans(n, string(m, '0'));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (check(i, j, r, c, n, m)) {
ans[i][j] = '0';
}
else {
if (r[i] == 0 || c[j] == 0) {
cout << -1;
return 0;
}
ans[i][j] = '1';
r[i]--;
c[j]--;
}
}
}
for (int x : r) {
if (x != 0) {
cout << -1;
return 0;
}
}
for (int x : c) {
if (x != 0) {
cout << -1;
return 0;
}
}
for (auto &s : ans)
cout << s << '\n';
return 0;
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IERpbmljIHsKICAgIHN0cnVjdCBFZGdlIHsKICAgICAgICBpbnQgdG8sIHJldiwgY2FwOwogICAgfTsKCiAgICBpbnQgbjsKICAgIHZlY3Rvcjx2ZWN0b3I8RWRnZT4+IGc7CiAgICB2ZWN0b3I8aW50PiBsZXZlbCwgcHRyOwoKICAgIERpbmljKGludCBuKSA6IG4obiksIGcobiksIGxldmVsKG4pLCBwdHIobikge30KCiAgICB2b2lkIGFkZEVkZ2UoaW50IHUsIGludCB2LCBpbnQgY2FwKSB7CiAgICAgICAgRWRnZSBhe3YsIChpbnQpZ1t2XS5zaXplKCksIGNhcH07CiAgICAgICAgRWRnZSBie3UsIChpbnQpZ1t1XS5zaXplKCksIDB9OwoKICAgICAgICBnW3VdLnB1c2hfYmFjayhhKTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayhiKTsKICAgIH0KCiAgICBib29sIGJmcyhpbnQgcywgaW50IHQpIHsKICAgICAgICBmaWxsKGxldmVsLmJlZ2luKCksIGxldmVsLmVuZCgpLCAtMSk7CgogICAgICAgIHF1ZXVlPGludD4gcTsKICAgICAgICBxLnB1c2gocyk7CiAgICAgICAgbGV2ZWxbc10gPSAwOwoKICAgICAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgICAgICBpbnQgdiA9IHEuZnJvbnQoKTsKICAgICAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgICAgIGZvciAoYXV0byAmZSA6IGdbdl0pIHsKICAgICAgICAgICAgICAgIGlmIChlLmNhcCA+IDAgJiYgbGV2ZWxbZS50b10gPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBsZXZlbFtlLnRvXSA9IGxldmVsW3ZdICsgMTsKICAgICAgICAgICAgICAgICAgICBxLnB1c2goZS50byk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBsZXZlbFt0XSAhPSAtMTsKICAgIH0KCiAgICBpbnQgZGZzKGludCB2LCBpbnQgdCwgaW50IHB1c2hlZCkgewogICAgICAgIGlmIChwdXNoZWQgPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgaWYgKHYgPT0gdCkgcmV0dXJuIHB1c2hlZDsKCiAgICAgICAgZm9yIChpbnQgJmNpZCA9IHB0clt2XTsgY2lkIDwgKGludClnW3ZdLnNpemUoKTsgY2lkKyspIHsKICAgICAgICAgICAgRWRnZSAmZSA9IGdbdl1bY2lkXTsKCiAgICAgICAgICAgIGlmIChlLmNhcCA8PSAwIHx8IGxldmVsW2UudG9dICE9IGxldmVsW3ZdICsgMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaW50IHRyID0gZGZzKGUudG8sIHQsIG1pbihwdXNoZWQsIGUuY2FwKSk7CgogICAgICAgICAgICBpZiAodHIgPT0gMCkgY29udGludWU7CgogICAgICAgICAgICBlLmNhcCAtPSB0cjsKICAgICAgICAgICAgZ1tlLnRvXVtlLnJldl0uY2FwICs9IHRyOwoKICAgICAgICAgICAgcmV0dXJuIHRyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaW50IG1heGZsb3coaW50IHMsIGludCB0LCBpbnQgbGltaXQpIHsKICAgICAgICBpbnQgZmxvdyA9IDA7CgogICAgICAgIHdoaWxlIChmbG93IDwgbGltaXQgJiYgYmZzKHMsIHQpKSB7CiAgICAgICAgICAgIGZpbGwocHRyLmJlZ2luKCksIHB0ci5lbmQoKSwgMCk7CgogICAgICAgICAgICB3aGlsZSAoZmxvdyA8IGxpbWl0KSB7CiAgICAgICAgICAgICAgICBpbnQgcHVzaGVkID0gZGZzKHMsIHQsIGxpbWl0IC0gZmxvdyk7CgogICAgICAgICAgICAgICAgaWYgKHB1c2hlZCA9PSAwKSBicmVhazsKCiAgICAgICAgICAgICAgICBmbG93ICs9IHB1c2hlZDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZsb3c7CiAgICB9Cn07Cgpib29sIGNoZWNrKGludCBpLCBpbnQgaiwKICAgICAgICAgICBjb25zdCB2ZWN0b3I8aW50PiAmciwKICAgICAgICAgICBjb25zdCB2ZWN0b3I8aW50PiAmYywKICAgICAgICAgICBpbnQgbiwgaW50IG0pIHsKCiAgICBpbnQgbmVlZCA9IDA7CgogICAgZm9yIChpbnQgeCA9IGk7IHggPCBuOyB4KyspCiAgICAgICAgbmVlZCArPSByW3hdOwoKICAgIGludCBTID0gMDsKCiAgICBpbnQgcm93QmFzZSA9IDE7CiAgICBpbnQgY29sQmFzZSA9IHJvd0Jhc2UgKyAobiAtIGkpOwogICAgaW50IFQgPSBjb2xCYXNlICsgbTsKCiAgICBEaW5pYyBkaW5pYyhUICsgMSk7CgogICAgZm9yIChpbnQgeCA9IGk7IHggPCBuOyB4KyspIHsKICAgICAgICBkaW5pYy5hZGRFZGdlKFMsIHJvd0Jhc2UgKyB4IC0gaSwgclt4XSk7CiAgICB9CgogICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtOyB5KyspIHsKICAgICAgICBkaW5pYy5hZGRFZGdlKGNvbEJhc2UgKyB5LCBULCBjW3ldKTsKICAgIH0KCiAgICBmb3IgKGludCB4ID0gaTsgeCA8IG47IHgrKykgewoKICAgICAgICBpbnQgZmlyc3RDb2wgPSAoeCA9PSBpID8gaiArIDEgOiAwKTsKCiAgICAgICAgZm9yIChpbnQgeSA9IGZpcnN0Q29sOyB5IDwgbTsgeSsrKSB7CgogICAgICAgICAgICBpZiAoclt4XSA9PSAwIHx8IGNbeV0gPT0gMCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgZGluaWMuYWRkRWRnZSgKICAgICAgICAgICAgICAgIHJvd0Jhc2UgKyB4IC0gaSwKICAgICAgICAgICAgICAgIGNvbEJhc2UgKyB5LAogICAgICAgICAgICAgICAgMQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGluaWMubWF4ZmxvdyhTLCBULCBuZWVkKSA9PSBuZWVkOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IG4sIG07CiAgICBjaW4gPj4gbiA+PiBtOwoKICAgIHZlY3RvcjxpbnQ+IHIobiksIGMobSk7CgogICAgaW50IHN1bVIgPSAwLCBzdW1DID0gMDsKCiAgICBmb3IgKGludCAmeCA6IHIpIHsKICAgICAgICBjaW4gPj4geDsKICAgICAgICBzdW1SICs9IHg7CiAgICB9CgogICAgZm9yIChpbnQgJnggOiBjKSB7CiAgICAgICAgY2luID4+IHg7CiAgICAgICAgc3VtQyArPSB4OwogICAgfQoKICAgIGlmIChzdW1SICE9IHN1bUMpIHsKICAgICAgICBjb3V0IDw8IC0xOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGZvciAoaW50IHggOiByKQogICAgICAgIGlmICh4IDwgMCB8fCB4ID4gbSkgewogICAgICAgICAgICBjb3V0IDw8IC0xOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgZm9yIChpbnQgeCA6IGMpCiAgICAgICAgaWYgKHggPCAwIHx8IHggPiBuKSB7CiAgICAgICAgICAgIGNvdXQgPDwgLTE7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICB2ZWN0b3I8c3RyaW5nPiBhbnMobiwgc3RyaW5nKG0sICcwJykpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtOyBqKyspIHsKCiAgICAgICAgICAgIGlmIChjaGVjayhpLCBqLCByLCBjLCBuLCBtKSkgewogICAgICAgICAgICAgICAgYW5zW2ldW2pdID0gJzAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHJbaV0gPT0gMCB8fCBjW2pdID09IDApIHsKICAgICAgICAgICAgICAgICAgICBjb3V0IDw8IC0xOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFuc1tpXVtqXSA9ICcxJzsKCiAgICAgICAgICAgICAgICByW2ldLS07CiAgICAgICAgICAgICAgICBjW2pdLS07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIChpbnQgeCA6IHIpIHsKICAgICAgICBpZiAoeCAhPSAwKSB7CiAgICAgICAgICAgIGNvdXQgPDwgLTE7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCB4IDogYykgewogICAgICAgIGlmICh4ICE9IDApIHsKICAgICAgICAgICAgY291dCA8PCAtMTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQoKICAgIGZvciAoYXV0byAmcyA6IGFucykKICAgICAgICBjb3V0IDw8IHMgPDwgJ1xuJzsKCiAgICByZXR1cm4gMDsKfQo=