#include <bits/stdc++.h>   using namespace std;   const double PI = 2.0 * acos(0.0);   const double E = exp(1);   template <class T1>   void deb(T1 e) {     cout << e << endl;   }   template <class T1, class T2>   void deb(T1 e1, T2 e2) {     cout << e1 <<     << e2 << endl;   }   template <class T1, class T2, class T3>   void deb(T1 e1, T2 e2, T3 e3) {     cout << e1 <<     << e2 <<     << e3 << endl;   }   template <class T1, class T2, class T3, class T4>   void deb(T1 e1, T2 e2, T3 e3, T4 e4) {     cout << e1 <<     << e2 <<     << e3 <<     << e4 << endl;   }   template <class T1, class T2, class T3, class T4, class T5>   void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {     cout << e1 <<     << e2 <<     << e3 <<     << e4 <<     << e5 << endl;   }   template <class T1, class T2, class T3, class T4, class T5, class T6>   void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5, T6 e6) {     cout << e1 <<     << e2 <<     << e3 <<     << e4 <<     << e5 <<     << e6          << endl;   }   template <typename T>   inline T sqr(T n) {     return n * n;   }   inline double hypot(double x, double y) { return sqrt(sqr(x) + sqr(y)); }   template <typename T>   inline T pmod(T n, T m) {     return ((n % m) + m) % m;   }   template <typename T>   T power(T n, int p) {     return (p == 0) ? (T)(1) : (sqr(power(n, p >> 1)) * ((p & 1) * (n - 1) + 1));   }   template <typename T>   T bigmod(T n, int p, T m) {     return (p == 0)                ? (T)(1)                : ((sqr(bigmod(n, p >> 1, m)) % m) * ((p & 1) * (n - 1) % m + 1)) %                      m;   }   bool dp[21][(1 << 6)][11][11][11][11][11];   int row[6], col[23];   int r, c;   vector<int> save[10];   int calc(int mask) {     int cnt = 0;     int prv = 0;     for (int i = 0; i < r; i++) {       if (!prv && (mask & (1 << i))) {         cnt++;       }       prv = mask & (1 << i);     }     return cnt;   }   char grid[6][21];   int tmp[10];   bool complet = 0;   void rec(int now, int prv_maks, int r1, int r2, int r3, int r4, int r5) {     if (r1 < 0 || r2 < 0 || r3 < 0 || r4 < 0 || r5 < 0) return;     if (complet) return;     if (dp[now][prv_maks][r1][r2][r3][r4][r5]) return;     dp[now][prv_maks][r1][r2][r3][r4][r5] = 1;     if (now == c) {       if (r1 + r2 + r3 + r4 + r5 == 0) {         for (int i = 0; i < r; ++i) {           for (int j = 0; j < c; ++j) printf( %c , grid[i][j]);           printf(  n );         }         complet = 1;       }       return;     }     int mask = 0;     for (int i = 0; i < (int)save[col[now]].size(); i++) {       mask = save[col[now]][i];       tmp[0] = r1;       tmp[1] = r2;       tmp[2] = r3;       tmp[3] = r4;       tmp[4] = r5;       for (int j = 0; j < r; j++) {         if (!(prv_maks & (1 << j)) && (mask & (1 << j))) {           tmp[j]--;         }       }       for (int j = 0; j < r; j++) {         grid[j][now] = (mask & (1 << j)) ?  *  :  . ;       }       rec(now + 1, mask, tmp[0], tmp[1], tmp[2], tmp[3], tmp[4]);       if (complet) return;     }   }   int main() {     scanf( %d %d , &r, &c);     for (int i = 0; i < r; ++i) scanf( %d , &row[i]);     for (int i = 0; i < c; ++i) {       scanf( %d , &col[i]);     };     int lim = 1 << r;     for (int i = 0; i < (1 << r); i++) {       save[calc(i)].push_back(i);     }     rec(0, 0, row[0], row[1], row[2], row[3], row[4]);   }