#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
typedef long long ll;
void my_return(ll code) { exit(code); }
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll my_exp(ll a, ll b, ll MOD = numeric_limits<ll>::max()) {
  a %= MOD;
  if (b == 0) {
    return 1;
  } else {
    return ((b % 2 == 1 ? a : 1) * my_exp(a * a, b / 2, MOD)) % MOD;
  }
}
bool is_prime(ll n) {
  if (n != 2 && n % 2 == 0) {
    return false;
  } else {
    for (int i = 3; (i * i) <= n; i += 2) {
      if (n % i == 0) return false;
    }
    return true;
  }
}
void sol(ll k, vector<vector<char>>& ans, ll x1, ll x2, ll y1, ll y2);
void solc(ll k, vector<vector<char>>& ans, ll x1, ll x2, ll y1, ll y2) {
  sol(k, ans, x1, x2, y1, y2);
  for (ll i = x1; i < x2; ++i) {
    for (ll j = y1; j < y2; ++j) {
      if (ans[i][j] == '+') {
        ans[i][j] = '*';
      } else {
        ans[i][j] = '+';
      }
    }
  }
}
void sol(ll k, vector<vector<char>>& ans, ll x1, ll x2, ll y1, ll y2) {
  if (k == 0) {
    ans[x1][y1] = '+';
  } else {
    sol(k - 1, ans, x1 + 0, x1 + my_exp(2, k - 1), y1 + 0,
        y1 + my_exp(2, k - 1));
    sol(k - 1, ans, x1 + 0, x1 + my_exp(2, k - 1), y1 + my_exp(2, k - 1),
        y1 + my_exp(2, k));
    sol(k - 1, ans, x1 + my_exp(2, k - 1), x1 + my_exp(2, k), y1 + 0,
        y1 + my_exp(2, k - 1));
    solc(k - 1, ans, x1 + my_exp(2, k - 1), x1 + my_exp(2, k),
         y1 + my_exp(2, k - 1), y1 + my_exp(2, k));
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  ll k;
  cin >> k;
  vector<vector<char>> ans(my_exp(2, k), vector<char>(my_exp(2, k), '-'));
  sol(k, ans, 0, my_exp(2, k), 0, my_exp(2, k));
  for (ll i = 0; i < my_exp(2, k); ++i) {
    for (ll j = 0; j < my_exp(2, k); ++j) {
      cout << ans[i][j];
    }
    cout << "\n";
  }
  my_return(0);
}
