#!/usr/bin/python

CC = "gcc"
tokens = "><+-[].,#"

import sys, os

if sys.stdin.isatty():
    sys.stderr.write("Usage: %s < file.bf\n" % sys.argv[0])
    sys.exit(1)

t = filter(lambda a: a in tokens, "".join(sys.stdin.readlines()))
c, p, n = ['int main() {', 'unsigned char mem[9999], *p = mem;'], 0, False

while p < len(t):
    add = 0
    while t[p] == '+' or t[p] == '-':
        add += 1 if t[p] == '+' else -1
        p += 1
    if add == 1:
        c.append('++*p;')
    elif add == -1:
        c.append('--*p;')
    elif add < 0:
        c.append('*p -= %d;' % (add * -1))
    elif add > 0:
        c.append('*p += %d;' % add)

    add = 0
    while t[p] == '>' or t[p] == '<':
            add += 1 if t[p] == '>' else -1
            p += 1
    if add == 1:
            c.append('++p;')
    elif add == -1:
            c.append('--p;')
    elif add < 0:
            c.append('p -= %d;' % (add * -1))
    elif add > 0:
            c.append('p += %d;' % add)

    if t[p] == '[':
            c.append('while (*p) {')
            p += 1
    elif t[p] == ']':
            c.append('}')
            p += 1
    elif t[p] == '.':
            if n:
                c.append('printf("%d ", *p);')
            else:
                c.append('putchar(*p);')
            p += 1
    elif t[p] == ',':
            c.append('*p = getchar();')
            p += 1
    elif t[p] == '#':
            c[0] = "#include <stdio.h>\nint main() {";
            n = not n
            p =+ 1

c.append('return 0;')
c.append('}')

cfile = os.tempnam() + ".c"
csrc = open(cfile, 'w')
csrc.write("\n".join(c) + "\n")
csrc.close()

args =[CC]
if len(sys.argv) > 1:
        args.extend(sys.argv[1:])
args.append(cfile)
os.spawnvpe(os.P_WAIT, CC, args, os.environ)

os.remove(cfile)