#include <bits/stdc++.h>
using namespace std;
const int NUM = 1e5 + 10;
int n, m;
int st[5][20];
void init(int s, int have, int ge, int pos) {
  if (pos == n) {
    st[ge][0]++;
    st[ge][st[ge][0]] = s;
    return;
  }
  init(s, 0, ge, pos + 1);
  if (have)
    init(s | (1 << pos), 1, ge, pos + 1);
  else
    init(s | (1 << pos), 1, ge + 1, pos + 1);
}
int a[10], b[25];
char ans[8][25];
set<int> ss[20][40];
bool dfs(int pos, int pre) {
  if (pos == m) {
    for (int i = 0; i < n; i++)
      if (a[i]) return false;
    for (int i = 0; i < n; i++) ans[i][pos] = '\0';
    return true;
  }
  int tmp = 1, p = 0;
  for (int i = 0; i < 5; i++) {
    p += a[i] * tmp;
    tmp *= 11;
  }
  if (ss[pos][pre].find(p) != ss[pos][pre].end()) return false;
  for (int i = 1; i <= st[b[pos]][0]; i++) {
    int d = st[b[pos]][i];
    for (int j = 0; j < n; j++)
      if ((d & (1 << j)) && (pre & (1 << j)) == 0) a[j]--;
    int flag = 0;
    for (int j = 0; j < n; j++)
      if (a[j] < 0 || ((m - 1 - pos) / 2 + 1) < a[j]) {
        flag = 1;
        break;
      }
    if (flag == 0 && dfs(pos + 1, d)) {
      for (int j = 0; j < n; j++) ans[j][pos] = (d & (1 << j)) ? '*' : '.';
      return true;
    }
    for (int j = 0; j < n; j++)
      if ((d & (1 << j)) && (pre & (1 << j)) == 0) a[j]++;
  }
  ss[pos][pre].insert(p);
  return false;
}
int main() {
  scanf("%d%d", &n, &m);
  init(0, 0, 0, 0);
  for (int i = 0; i < n; i++) scanf("%d", a + i);
  for (int i = 0; i < m; i++) scanf("%d", b + i);
  for (int i = n + 1; i < 5; i++) a[i] = 0;
  dfs(0, 0);
  for (int i = 0; i < n; i++) cout << ans[i] << endl;
}
