#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  long long r;
  while (b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
const int maxn = 5;
const int maxm = 20;
int n, m;
int a[maxn];
int b[maxm];
vector<int> block[6];
unsigned f[11][11][11][11][11][maxm];
int ans[maxn][maxm];
bool go(int i, int k) {
  if (i == m) {
    for (int j = 0; j < n; j++)
      if (a[j] != 0) return false;
    return true;
  }
  for (int j = 0; j < n; j++)
    if (a[j] < 0) return false;
  unsigned &tmp = f[a[0]][a[1]][a[2]][a[3]][a[4]][i];
  if (tmp & (1u << k)) return false;
  tmp |= 1 << k;
  for (int j = 0; j < int((block[b[i]]).size()); j++) {
    int u = block[b[i]][j];
    bool flag = true;
    for (int l = 0; l < n; l++) {
      if (u & (1 << l)) {
        if (!(k & (1 << l))) a[l]--;
        ans[l][i] = 1;
      }
      if (a[l] < 0) flag = false;
    }
    if (flag && go(i + 1, u)) return true;
    for (int l = 0; l < n; l++) {
      ans[l][i] = 0;
      if ((u & (1 << l)) && !(k & (1 << l))) a[l]++;
    }
  }
  return false;
}
void solve() {
  memset(a, 0, sizeof(a));
  memset(b, 0, sizeof(b));
  memset(f, 0, sizeof(f));
  memset(ans, 0, sizeof(ans));
  scanf("%d%d", &n, &m);
  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 = 0; i < 1 << n; i++) {
    int cnt = 0;
    for (int j = 0; j < n; j++)
      if (((i >> j) & 3) == 1) cnt++;
    block[cnt].push_back(i);
  }
  if (go(0, 0))
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) ans[i][j] ? printf("*") : printf(".");
      printf("\n");
    }
}
int main() {
  solve();
  return 0;
}
