#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> row, col;
vector<int> block_masks[11];
int sol[21];
struct State {
  int r, l;
  vector<int> c;
};
bool operator<(const State &a, const State &b) {
  if (a.r != b.r) return a.r < b.r;
  if (a.l != b.l) return a.l < b.l;
  return a.c < b.c;
}
set<State> vis;
void modify(int mask, int d) {
  for (int i = 0; i < m; ++i) {
    if (mask & (1 << i)) {
      col[i] += d;
    }
  }
}
bool check_cols(int r) {
  for (int i = 0; i < m; ++i) {
    if (col[i] < 0 || (n - r) / 2 < col[i]) {
      return false;
    }
  }
  return true;
}
bool solve(int r, int last) {
  if (r >= n) {
    return accumulate(col.begin(), col.end(), 0) == 0;
  }
  State s = {r, last, col};
  if (vis.count(s)) {
    return false;
  }
  vis.insert(s);
  for (int mask : block_masks[row[r]]) {
    int new_blocks = (mask ^ last) & mask;
    modify(new_blocks, -1);
    if (check_cols(r) && solve(r + 1, mask)) {
      sol[r] = mask;
      return true;
    }
    modify(new_blocks, +1);
  }
  return false;
}
int main() {
  scanf("%d%d", &n, &m);
  row.resize(n);
  col.resize(m);
  for (int i = 0; i < n; ++i) scanf("%d", &row[i]);
  for (int i = 0; i < m; ++i) scanf("%d", &col[i]);
  swap(n, m);
  row.swap(col);
  for (int i = 0; i < (1 << m); ++i) {
    int in = 0, blocks = 0;
    for (int j = 0; j < m; ++j) {
      if (((i >> j) & 1)) {
        blocks += !in;
        in = 1;
      } else {
        in = 0;
      }
    }
    block_masks[blocks].push_back(i);
  }
  if (solve(0, 0)) {
    for (int i = 0; i < m; ++i) {
      for (int j = 0; j < n; ++j) {
        putchar((sol[j] & (1 << i)) ? '*' : '.');
      }
      putchar('\n');
    }
  } else {
    assert(false);
  }
  return 0;
}
