#include <bits/stdc++.h>
using namespace std;
const int N = 5 + 2, M = 20 + 2, H = 2e5;
int n, m, a[N], b[M], ans[M];
vector<int> vc[N][1 << N];
bitset<1 << N> mark[M][H];
char c[2] = {'.', '*'};
bool bit(int x, int b) { return x >> b & 1; }
int cur, h;
bool memoize(int k, int prv) {
  if (!k--) return !cur;
  if (mark[k][h][prv]) return false;
  mark[k][h].set(prv);
  for (auto x : vc[b[k]][cur | prv]) {
    for (int i = 0, w = 1; i < n; i++, w *= 11)
      if (bit(x, i) && !bit(prv, i)) h -= w, cur ^= !--a[i] << i;
    if (memoize(k, ans[k] = x)) return true;
    for (int i = 0, w = 1; i < n; i++, w *= 11)
      if (bit(x, i) && !bit(prv, i)) h += w, cur ^= !a[i]++ << i;
  }
  return false;
}
int main() {
  cin >> n >> m;
  for (int i = 0, w = 1; i < n; i++) {
    cin >> a[i];
    h += a[i] * w, w *= 11;
    cur |= (a[i] > 0) << i;
  }
  for (int i = 0; i < m; i++) cin >> b[i];
  for (int msk = 0; msk < 1 << n; msk++) {
    int cnt = 0;
    for (int i = 0; i < n; i++) cnt += bit(msk, i) && (!i || !bit(msk, i - 1));
    int now = 0;
    do {
      vc[cnt][(1 << n) - now - 1].push_back(msk);
    } while (--now &= (1 << n) - msk - 1);
  }
  assert(memoize(m, 0));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) cout << c[bit(ans[j], i)];
    cout << endl;
  }
}
