#include <bits/stdc++.h>
using namespace std;
const int INF = numeric_limits<int>::max();
const long long LLINF = numeric_limits<long long>::max();
const unsigned long long ULLINF = numeric_limits<unsigned long long>::max();
vector<string> s;
string negat(string a) {
  string s = a;
  for (int i = 0; i < a.size(); i++) {
    if (a[i] == '+')
      s[i] = '*';
    else
      s[i] = '+';
  }
  return s;
}
bool check(string s) {
  for (int i = 0; i < s.size(); i++)
    if (s[i] == '+') return 0;
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  s.push_back("****");
  s.push_back("**++");
  s.push_back("*+*+");
  s.push_back("+**+");
  int k;
  cin >> k;
  if (k == 0)
    cout << "+";
  else if (k == 1)
    cout << "++\n*+";
  else {
    for (int i = 3; i <= k; i++) {
      int sz = s.size();
      for (int j = s.size() - (1 << (i - 1)); j < sz; j++) {
        s.push_back(s[j] + s[j]);
        if (!check(s[j]))
          s.push_back(negat(s[j]) + s[j]);
        else
          s.push_back(s[j] + negat(s[j]));
      }
    }
    for (int i = s.size() - (1 << k); i < s.size(); i++) cout << s[i] << '\n';
  }
  return 0;
}
