#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[6], b[21], c[21];
vector<int> vec[11];
bool vis[22][11 * 11 * 11 * 11 * 11][33];
bool check(int y, int state, int pre) {
  for (int i = 1; i <= n; i++) {
    int num = state % 11;
    state /= 11;
    if (num > a[i]) return 0;
    if (num + (m - y + 2) / 2 < a[i]) return 0;
  }
  return 1;
}
bool ok(int state) {
  for (int i = 1; i <= n; i++) {
    int num = state % 11;
    state /= 11;
    if (num != a[i]) return 0;
  }
  return 1;
}
int uni(int state, int pre, int now) {
  int tmp[6];
  int ans = 0;
  for (int i = 1; i <= n; i++) tmp[i] = state % 11, state /= 11;
  for (int i = n; i >= 1; i--) {
    ans *= 11;
    if ((pre & (1 << i - 1)) == 0 && (now & (1 << i - 1)) != 0) tmp[i]++;
    ans = ans + tmp[i];
  }
  return ans;
}
void print() {
  for (int i = 1; i <= n; i++, printf("\n"))
    for (int j = 1; j <= m; j++) {
      if (c[j] & (1 << i - 1))
        printf("*");
      else
        printf(".");
    }
}
void dfs(int y, int state, int pre) {
  if (vis[y][state][pre]) return;
  if (y == m + 1) {
    if (ok(state)) {
      print();
      exit(0);
    }
    return;
  }
  for (int i = 0; i < vec[b[y]].size(); i++) {
    int s = vec[b[y]][i];
    int ss = uni(state, pre, s);
    c[y] = s;
    dfs(y + 1, ss, s);
  }
  vis[y][state][pre] = 1;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]);
  for (int i = 0; i < (1 << n); i++) {
    int cnt = 0;
    for (int j = 1; j <= n; j++)
      if (j == 1 && i & 1 ||
          j > 1 && (i & (1 << j - 1)) != 0 && (i & (1 << j - 2)) == 0)
        cnt++;
    vec[cnt].push_back(i);
  }
  dfs(1, 0, 0);
}
