The semester is already ending, so Danil made an effort and decided to visit a lesson on harmony analysis to know how does the professor look like, at least. Danil was very bored on this lesson until the teacher gave the group a simple task: find 4 vectors in 4-dimensional space, such that every coordinate of every vector is 1 or  - 1 and any two vectors are orthogonal. Just as a reminder, two vectors in n-dimensional space are considered to be orthogonal if and only if their scalar product is equal to zero, that is: $\sum_{i = 1}^{n} a_{i} \cdot b_{i} = 0$.

Danil quickly managed to come up with the solution for this problem and the teacher noticed that the problem can be solved in a more general case for 2^{k} vectors in 2^{k}-dimensinoal space. When Danil came home, he quickly came up with the solution for this problem. Can you cope with it?


-----Input-----

The only line of the input contains a single integer k (0 ≤ k ≤ 9).


-----Output-----

Print 2^{k} lines consisting of 2^{k} characters each. The j-th character of the i-th line must be equal to ' * ' if the j-th coordinate of the i-th vector is equal to  - 1, and must be equal to ' + ' if it's equal to  + 1. It's guaranteed that the answer always exists.

If there are many correct answers, print any.


-----Examples-----
Input
2

Output
++**
+*+*
++++
+**+


-----Note-----

Consider all scalar products in example:  Vectors 1 and 2: ( + 1)·( + 1) + ( + 1)·( - 1) + ( - 1)·( + 1) + ( - 1)·( - 1) = 0  Vectors 1 and 3: ( + 1)·( + 1) + ( + 1)·( + 1) + ( - 1)·( + 1) + ( - 1)·( + 1) = 0  Vectors 1 and 4: ( + 1)·( + 1) + ( + 1)·( - 1) + ( - 1)·( - 1) + ( - 1)·( + 1) = 0  Vectors 2 and 3: ( + 1)·( + 1) + ( - 1)·( + 1) + ( + 1)·( + 1) + ( - 1)·( + 1) = 0  Vectors 2 and 4: ( + 1)·( + 1) + ( - 1)·( - 1) + ( + 1)·( - 1) + ( - 1)·( + 1) = 0  Vectors 3 and 4: ( + 1)·( + 1) + ( + 1)·( - 1) + ( + 1)·( - 1) + ( + 1)·( + 1) = 0

Difficulty: MEDIUM_HARD

Solutions:
__author__ = 'Utena'

def t(x):
	a = ''
	for l in x:
		if l == '+':
			a += '*'
		elif l == '*':
			a += '+'
	return a
k = int(input())
if k == 0:
	print('+')
	return
m = ['++', '+*']
s = 1
for i in range(k - 1):
	m = m + m
	s *= 2
	for j in range(s):
		m[j] += m[j]
		m[s + j] += t(m[s + j])
for y in m:
	print(y)


from __future__ import nested_scopes, generators, division, absolute_import, with_statement, print_function, unicode_literals
import sys, os, time

def rv():
	return map(int, input().split())

def rl(n):
	return [list(map(int, input().split())) for _ in range(n)]
if os.path.exists('test.txt'):
	sys.stdin = open('test.txt')

def get(k):
	if k == 0:
		return [[1]]
	smaller = get(k - 1)
	newdim = len(smaller) * 2
	res = [[0] * newdim for _ in range(newdim)]
	for row in range(newdim):
		for col in range(newdim):
			res[row][col] = smaller[row % len(smaller)][col % len(smaller)]
			if row >= len(smaller) and col >= len(smaller):
				res[row][col] *= -1
	return res

def solve():
	(k,) = rv()
	res = get(k)
	for row in res:
		for char in row:
			print('+' if char == 1 else '*', end='')
		print()
solve()


import itertools
import math

def minusv(L):
	return [-x for x in L]

def adamar(M):
	return [L * 2 for L in M] + [L + minusv(L) for L in M]
k = int(input())
a = [[1]]
for i in range(k):
	a = adamar(a)
for L in a:
	print(''.join(['+' if c == 1 else '*' for c in L]))


n = int(input())
h = [1]
for i in range(n):
	if i == 0:
		h = [[1, 1], [1, -1]]
	else:
		x = []
		for row in h:
			p = row.copy()
			p.extend(p)
			x.append(p)
		for row in h:
			p = row.copy()
			p.extend([-x for x in p])
			x.append(p)
		h = x.copy()
if n == 0:
	print('+')
else:
	for row in h:
		for i in row:
			c = '+' if i == 1 else '*'
			print(c, end='')
		print('')


def invert(a):
	for i in range(len(a)):
		for j in range(len(a[i])):
			if a[i][j] == 1:
				a[i][j] = 0
			else:
				a[i][j] = 1
	return a
k = int(input())
a = [[1]]
if k == 0:
	print('+')
	exit()
for i in range(1, k + 1):
	ans = [None] * 2 ** i
	ares = []
	for j in a:
		ares1 = []
		for u in j:
			if u == 1:
				ares1.append(1)
			else:
				ares1.append(0)
		ares.append(ares1)
	invert(ares)
	for j in range(2 ** i // 2):
		ans[j] = a[j] + a[j]
	for j in range(2 ** i // 2, 2 ** i):
		ans[j] = a[j - 2 ** i // 2] + ares[j - 2 ** i // 2]
	a = ans
for i in a:
	for j in i:
		if j == 1:
			print('+', end='')
		else:
			print('*', end='')
	print()


Not = lambda x: '+' if x == '*' else '*'
k = int(input())
n = 2 ** k
a = [['+'] * n for i in range(n)]
for p in range(k):
	n = 2 ** p
	for i in range(n):
		for j in range(n):
			a[i][j + n] = a[i][j]
			a[i + n][j] = a[i][j]
			a[i + n][j + n] = Not(a[i][j])
[print(''.join(map(str, i))) for i in a]


def flip(str):
	ret = ''
	for k in str:
		if k == '+':
			ret += '*'
		else:
			ret += '+'
	return ret
k = int(input())
a2 = ['++', '+*']
a1 = []
if k == 0:
	print('+')
	exit(0)
while k > 1:
	a3 = []
	flag = True
	for p in range(2):
		for i in range(len(a2)):
			if flag:
				temp = a2[i] + a2[i]
				a3.append(temp)
			else:
				temp = a2[i] + flip(a2[i])
				a3.append(temp)
		flag = False
	a2 = a3
	k -= 1
for i in a2:
	print(i)


import sys

def check(arr):
	n = len(arr)
	for i in range(n):
		for j in range(i + 1, n):
			diff = 0
			for k in range(n):
				if arr[i][k] == arr[j][k]:
					diff += 1
				else:
					diff -= 1
			if diff:
				return (arr[i], arr[j])
	return False

def inv(arr):
	return [not x for x in arr]

def gen(n):
	if n == 1:
		return [[True]]
	curr = gen(n // 2)
	ans = []
	ans.extend((x + x for x in curr))
	ans.extend((x + inv(x) for x in curr))
	return ans
k = int(input())
ans = gen(2 ** k)
for x in ans:
	sys.stdout.write(''.join(['+' if el else '*' for el in x]))
	sys.stdout.write('\n')


import sys
if False:
	inp = open('C.txt', 'r')
else:
	inp = sys.stdin

def inverse(string):
	ans = ''
	for char in string:
		if char == '*':
			ans += '+'
		else:
			ans += '*'
	return ans

def recursion(k):
	if k == 0:
		return ['+']
	ans = recursion(k - 1)
	ans = ans + ans
	for i in range(2 ** (k - 1)):
		ans[i] = 2 * ans[i]
		ans[i + 2 ** (k - 1)] += inverse(ans[i + 2 ** (k - 1)])
	return ans
k = int(inp.readline())
for string in recursion(k):
	print(string)


n = int(input())
ans = [[1]]
k = 0
while k < n:
	k += 1
	for i in range(len(ans)):
		ans[i].extend(ans[i])
	for i in range(len(ans)):
		ans.append(ans[i][:])
	for i in range(int(len(ans) / 2), len(ans)):
		for j in range(int(len(ans[i]) / 2), len(ans[i])):
			ans[i][j] *= -1
for i in ans:
	for j in i:
		if j == -1:
			print('*', end='')
		else:
			print('+', end='')
	print()


def f(k):
	if k == '+':
		return '*'
	else:
		return '+'

def g(k):
	s = []
	for c in k:
		s.append(f(c))
	return ''.join(s)

def solve(k):
	if k == 0:
		return ['+']
	else:
		h = solve(k - 1)
		n = 1 << k
		q = n >> 1
		for i in range(q):
			h.append(h[i] + g(h[i]))
			h[i] += h[i]
		return h
k = int(input())
h = solve(k)
for a in h:
	print(a)


import sys
input = sys.stdin.readline

def neg(a):
	b = ''
	for i in range(len(a)):
		if a[i] == '+':
			b += '*'
		else:
			b += '+'
	return b
n = int(input())
a = '+'
e = [a]
for i in range(n):
	for j in range(2 ** i):
		b = e[j]
		e[j] += b
		e.append(b + neg(b))
for i in range(len(e)):
	print(e[i])


def rev(i):
	t = ''
	for x in i:
		if x == '+':
			t += '*'
		else:
			t += '+'
	return t

def f(n):
	if n == 1:
		return ['++', '+*']
	x = f(n - 1)
	p = list((i + i for i in x))
	p = p + list((i + rev(i) for i in x))
	return p
N = int(input())
if N == 0:
	print('+')
else:
	t = f(N)
	for i in t:
		print(i)


inv = lambda t: ''.join(('*' if u == '+' else '+' for u in t))
n = int(input())
r = ['+']
for _ in range(n):
	r = [r[i] * 2 for i in range(len(r))] + [r[i] + inv(r[i]) for i in range(len(r))]
print(*r, sep='\n')