- def f(n): 
-     return 1 if n<1 else 6*f(n-1) + sum(f(i)*f(n-2-i) for i in xrange(n-1)) 
-   
- def h(x): 
-     if x=='': return 1 
-   
-     if len(x)==1: return ' +-<>,.'.find(x) 
-   
-     if x[0]!='[': 
-         return (h(x[0])-1) * f(len(x)-1) + h(x[1:]) 
-   
-     d=i=1 
-     while d: 
-         if x[i]==']': d-=1 
-         elif x[i]=='[': d+=1 
-         i+=1 
-   
-     a=i-2 
-     b=len(x)-i 
-   
-     return 6*f(a+b+1) + sum(f(i)*f(a+b-i) for i in range(a)) + (h(x[1:i-1])-1) * f(b) + h(x[i:]) 
-   
- def g(x): 
-     return sum(f(i) for i in xrange(len(x))) + h(x) 
-   
- def enumerate(n): 
-     if n==0: return [''] 
-   
-     a=[] 
-   
-     for c in '+-<>,.': 
-         for x in enumerate(n-1): 
-             a+=[c+x] 
-   
-     for i in range(n-1): 
-         for x in enumerate(i): 
-             for y in enumerate(n-2-i): 
-                 a+=['['+x+']'+y] 
-   
-     return a 
-   
- def verify(): 
-     i=1 
-   
-     for n in range(7): 
-         for x in enumerate(n): 
-             if g(x)!=i: 
-                 print i,g(x),x 
-                 1/0 
-             i+=1 
-         print 'n=%d done'%n 
-   
-     print 'ok' 
-   
- def test(): 
-     i=1 
-     for n in range(7): 
-         a=enumerate(n) 
-   
-         for x in a: 
-             print i,x 
-             i+=1 
-   
-         print 'for n=%d, there are %d valid programs'%(n,len(a)) 
-   
- verify() 
				ZGVmIGYobik6CiAgICByZXR1cm4gMSBpZiBuPDEgZWxzZSA2KmYobi0xKSArIHN1bShmKGkpKmYobi0yLWkpIGZvciBpIGluIHhyYW5nZShuLTEpKQoKZGVmIGgoeCk6CiAgICBpZiB4PT0nJzogcmV0dXJuIDEKICAgIAogICAgaWYgbGVuKHgpPT0xOiByZXR1cm4gJyArLTw+LC4nLmZpbmQoeCkKICAgIAogICAgaWYgeFswXSE9J1snOgogICAgICAgIHJldHVybiAoaCh4WzBdKS0xKSAqIGYobGVuKHgpLTEpICsgaCh4WzE6XSkKICAgIAogICAgZD1pPTEKICAgIHdoaWxlIGQ6CiAgICAgICAgaWYgeFtpXT09J10nOiBkLT0xCiAgICAgICAgZWxpZiB4W2ldPT0nWyc6IGQrPTEKICAgICAgICBpKz0xCiAgICAKICAgIGE9aS0yCiAgICBiPWxlbih4KS1pCiAgICAKICAgIHJldHVybiA2KmYoYStiKzEpICsgc3VtKGYoaSkqZihhK2ItaSkgZm9yIGkgaW4gcmFuZ2UoYSkpICsgKGgoeFsxOmktMV0pLTEpICogZihiKSArIGgoeFtpOl0pCgpkZWYgZyh4KToKICAgIHJldHVybiBzdW0oZihpKSBmb3IgaSBpbiB4cmFuZ2UobGVuKHgpKSkgKyBoKHgpCgpkZWYgZW51bWVyYXRlKG4pOgogICAgaWYgbj09MDogcmV0dXJuIFsnJ10KICAgIAogICAgYT1bXQogICAgCiAgICBmb3IgYyBpbiAnKy08PiwuJzoKICAgICAgICBmb3IgeCBpbiBlbnVtZXJhdGUobi0xKToKICAgICAgICAgICAgYSs9W2MreF0KICAgIAogICAgZm9yIGkgaW4gcmFuZ2Uobi0xKToKICAgICAgICBmb3IgeCBpbiBlbnVtZXJhdGUoaSk6CiAgICAgICAgICAgIGZvciB5IGluIGVudW1lcmF0ZShuLTItaSk6CiAgICAgICAgICAgICAgICBhKz1bJ1snK3grJ10nK3ldCiAgICAKICAgIHJldHVybiBhCgpkZWYgdmVyaWZ5KCk6CiAgICBpPTEKICAgIAogICAgZm9yIG4gaW4gcmFuZ2UoNyk6CiAgICAgICAgZm9yIHggaW4gZW51bWVyYXRlKG4pOgogICAgICAgICAgICBpZiBnKHgpIT1pOgogICAgICAgICAgICAgICAgcHJpbnQgaSxnKHgpLHgKICAgICAgICAgICAgICAgIDEvMAogICAgICAgICAgICBpKz0xCiAgICAgICAgcHJpbnQgJ249JWQgZG9uZSclbgogICAgCiAgICBwcmludCAnb2snCgpkZWYgdGVzdCgpOgogICAgaT0xCiAgICBmb3IgbiBpbiByYW5nZSg3KToKICAgICAgICBhPWVudW1lcmF0ZShuKQogICAgICAgIAogICAgICAgIGZvciB4IGluIGE6CiAgICAgICAgICAgIHByaW50IGkseAogICAgICAgICAgICBpKz0xCiAgICAgICAgCiAgICAgICAgcHJpbnQgJ2ZvciBuPSVkLCB0aGVyZSBhcmUgJWQgdmFsaWQgcHJvZ3JhbXMnJShuLGxlbihhKSkKCnZlcmlmeSgp