#include #include #include int main() { int n, m, sum1 = 0, sum2 = 0; std::cin >> n >> m; std::vector > c(n + m + 2, std::vector(n + m + 2, 0)); for (int i = 0; i < n; ++i) { int tmp; std::cin >> tmp; c[0][i + 1] = tmp; sum1 += tmp; for (int j = 0; j < m; ++j) { c[i + 1][n + j + 1] = 1; } } for (int j = 0; j < m; ++j) { int tmp; std::cin >> tmp; c[n + j + 1][n + m + 1] = tmp; sum2 += tmp; } if (sum1 != sum2) { std::cout << "impossible" << std::endl; return 0; } std::vector > f(c.size(), std::vector(c.size())); for (; ; ) { std::vector from(c.size(), -1); std::vector q(c.size()); int h = 0, t = 0; q[t++] = 0; from[0] = 0; for (int cur; h < t; ) { cur = q[h++]; for (int v = 0; v < (int)c.size(); ++v) { if (from[v] == -1 && c[cur][v] - f[cur][v] > 0) { q[t++] = v; from[v] = cur; } } } if (from[c.size() - 1] == -1) { break; } int cf = INT_MAX; for (int cur = c.size() - 1; cur != 0; ) { int prev = from[cur]; cf = std::min(cf, c[prev][cur] - f[prev][cur]); cur = prev; } for (int cur = c.size() - 1; cur != 0; ) { int prev = from[cur]; f[prev][cur] += cf; f[cur][prev] -= cf; cur = prev; } } int flow = 0; for (int i = 0; i < (int)c.size(); ++i) { if (c[0][i]) { flow += f[0][i]; } } if (flow != sum1) { std::cout << "impossible" << std::endl; } else { for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { std::cout << f[i + 1][n + j + 1]; } std::cout << std::endl; } } return 0; }