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: interview

Starter code:

Solutions:
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]))



def vec(x):
	if x == 0:
		return [[1]]
	s = vec(x-1)
	y = vec(x-1)
	for i in range(2**(x-1)):
		for j in range(2**(x-1)):
			y[i][j] = -y[i][j]
	out = [s[i]+y[i] for i in range(2**(x-1))]
	out2 = [s[i]+s[i] for i in range(2**(x-1))]
	return (out+out2)
x = int(input())
s=vec(x)
for i in range(2**x):
	ret = ""
	for j in range(2**x):
		if s[i][j] == 1:
			ret+="+"
		else:
			ret+="*"
	print(ret)


def anti(s):
    return "".join(['+' if s[i] == '*' else '*' for i in range(len(s))])

k = int(input())
result = [[] for i in range(k + 2)]
result[0] = [ '+' ]
for i in range(1, k + 1):
    for e in result[i - 1]:
        result[i] += [e + e]
        result[i] += [e + anti(e)]
                
print("\n".join(result[k]))


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")

k = int(input())

a = [['' for _ in range(2 ** k)] for _ in range(2 ** k)]
a[0][0] = '+'

for m in range(1, k+1):
    p = 2 ** (m - 1)
    for i in range(p):
        for j in range(p):
            a[p+i][j] = a[i][j]
            if i % 2 == 0:
                a[i][p+j] = '*' if a[i][j] == '+' else '+'
                a[p+i][p+j] = a[i][j]
            else:
                a[i][p+j] = a[i][j]
                a[p+i][p+j] = '*' if a[i][j] == '+' else '+'

print('\n'.join(''.join(x) for x in a))


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]))


__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)

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 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)

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)



def neg(a):
    if(a=='+'):
        return '*'
    else:
        return '+'
def gen(s,e,k,l,a):
    if((s+1)<e):
        mid=int((s+e)/2)
        a[mid]=[];
        for i in range (0,pow(2,l)):
            a[mid].append(a[s][i])
        for i in range (pow(2,l),pow(2,(l+1))):
            a[mid].append(neg(a[s][i]))
        for i in range (pow(2,(l+1)),k):
            a[mid].append(a[mid][int(i%pow(2,(l+1)))])
        gen(s,mid,k,l+1,a)
        gen(mid,e,k,l+1,a)
    return
def print_l(a,n):
    b=""
    for i in range (0,n):
        b+=str(a[i])
    print(b)
    return
n=int(input())
a=[None]*(pow(2,n))
a[0]=['+']*pow(2,n)
gen(0,pow(2,n),pow(2,n),0,a)
for i in range (0,pow(2,n)):
    print_l(a[i],pow(2,n));


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)

k = int(input())

a = [['' for _ in range(2 ** k)] for _ in range(2 ** k)]
a[0][0] = '+'

for m in range(1, k+1):
    p = 2 ** (m - 1)
    for i in range(p):
        for j in range(p):
            a[p+i][j] = a[i][j]
            if i % 2 == 0:
                a[i][p+j] = '*' if a[i][j] == '+' else '+'
                a[p+i][p+j] = a[i][j]
            else:
                a[i][p+j] = a[i][j]
                a[p+i][p+j] = '*' if a[i][j] == '+' else '+'

print('\n'.join(''.join(x) for x in a))

from functools import reduce
from operator import *
from math import *
from sys import *
from string import *
from collections import *
setrecursionlimit(10**7)
dX= [-1, 1, 0, 0,-1, 1,-1, 1]
dY= [ 0, 0,-1, 1, 1,-1,-1, 1]
RI=lambda: list(map(int,input().split()))
RS=lambda: input().rstrip().split()
#################################################
def inv(x):
    s=""
    for i in x:
        s+= "+*"[i=='+']
    return s
x=['+']
n=RI()[0]
for i in range(n):
    t=[]
    for j in range(len(x)):
        t.append(x[j]+x[j])
        t.append(x[j]+inv(x[j]))
    x=t
print(*x, sep='\n')




k = int(input())

if (k == 0):
    print('+')
    return

answer = [['+', '+'], ['+', '*']]
length = 2
for i in range(k - 1):
    new = []
    for i in answer:
        temp = []
        for j in range(length):
            if i[j] == '+':
                temp += ['+', '+']
            else:
                temp += ['*', '*']
        new.append(temp)
    for i in answer:
        temp = []
        for j in range(length):
            if i[j] == '+':
                temp += ['+', '*']
            else:
                temp += ['*', '+']
        new.append(temp)
    answer = new
    length *= 2

print('\n'.join([''.join(i) for i in answer]))


#!/usr/bin/env python3
import sys

def flatten(iter_lst):
    return list(item for iter_ in iter_lst for item in iter_)

def repeatPattern(a, b, totalLength):

  totalLength = len(a)*len(b)
  ret = [None]*totalLength
  x = 0
  for i in a:
    for j in b:
      ret[x] = i*j
      x += 1
  return tuple(ret)

def vectors(k):
  if k == 0:
    return set([(1,)])
  if k == 1:
    return set(((1, 1), (1, -1)))
  else:
    vk = vectors(k-1)
    ret = set()
    for a in vectors(1):
      for b in vk:
        ret.add(repeatPattern(a, b, None))
    return ret

def string(v):
  return ''.join("+" if i == 1 else "*" for i in v)

def strings(k):
  return list(map(string, vectors(k)))

N = int(input())
for s in strings(N):
  print(s)
# for _ in range(100):
#   strings(N)


def solve():
    K = int(input())

    e = [["++", "**"], ["+*", "*+"]]
    vs = ["+"]
    for i in range(K):
        nv = []
        for j in range(2):
            for v in vs:
                x = []
                for c in v:
                    x.append(e[j][0] if c == '+' else e[j][1])
                nv.append(''.join(x))
        vs = nv

    for v in vs:
        print(v)


def __starting_point():
    solve()

__starting_point()

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