#include <bits/stdc++.h>
using namespace std;
template <typename T>
T nextInt() {
  T x = 0, p = 1;
  char ch;
  do {
    ch = getchar();
  } while (ch <= ' ');
  if (ch == '-') {
    p = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * p;
}
const int maxN = (int)5e2 + 10;
const int INF = (int)1e9;
const int mod = (int)1e9 + 7;
const long long LLINF = (long long)1e18;
long long a[maxN];
int n;
bool ok = false;
bool bad(int idx) {
  for (int i = 0; i < idx; ++i) {
    int r = 0;
    for (int j = 0; j < n; ++j) {
      if (((a[i] >> j) & 1) != ((a[idx] >> j) & 1)) {
        r--;
      } else {
        r++;
      }
    }
    if (r != 0) return true;
  }
  return false;
}
int cnt = 0;
void print() {
  ok = 0;
  for (int i = 0; i < 30; ++i) putchar('-');
  putchar('\n');
  char f[] = {'*', '+'};
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      cout << f[(a[i] >> j) & 1];
    }
    cout << '\n';
  }
  cout << '\n';
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      cout << f[(a[i] >> j) & 1];
      if (j == n / 2 - 1) putchar(' ');
    }
    cout << '\n';
    if (i == n / 2 - 1) putchar('\n');
  }
  cout << '\n';
  for (int i = 0; i < 30; ++i) putchar('-');
  putchar('\n');
}
void dfs(int idx, int n) {
  if (idx == n) {
    print();
    return;
  }
  for (long long mask = 0; mask < (1LL << n) && ok; ++mask) {
    a[idx] = mask;
    if (bad(idx)) continue;
    dfs(idx + 1, n);
  }
}
char rev(char x) {
  if (x == '+') return '*';
  return '+';
}
vector<vector<char> > build(int k) {
  vector<vector<char> > ret(1 << k, vector<char>(1 << k, '?'));
  if (k == 0) {
    ret[0][0] = '*';
    return ret;
  }
  vector<vector<char> > prev = build(k - 1);
  int prevsz = (1 << k) / 2;
  for (int i = 0; i < prevsz; ++i) {
    for (int j = 0; j < prevsz; ++j) {
      ret[i][2 * j] = ret[i][2 * j + 1] = prev[i][j];
    }
  }
  for (int j = prevsz - 1; j >= 0; --j) {
    for (int i = 0; i < prevsz; ++i) {
      ret[prevsz + i][2 * j + 1] = prev[i][j];
      ret[prevsz + i][2 * j] = rev(prev[i][j]);
    }
  }
  return ret;
}
int main() {
  int k;
  cin >> k;
  vector<vector<char> > answer = build(k);
  for (int i = 0; i < answer.size(); ++i) {
    for (int j = 0; j < answer[i].size(); ++j) {
      putchar(answer[i][j]);
    }
    putchar('\n');
  }
  return 0;
}
