#include <stdio.h>

main(int argc, char *argv[])
{
FILE *z;
int  a[5000], b, p=0, f[5000], *s=f, i=0;

if( z=fopen(argv[1],"r") )
	{
	*s=0;
	while( (b=getc(z))>0 )
		{
		switch( b )
			{
			case '<': *s+=1<<i;
			case '>': *s+=1<<i;
			case '+': *s+=1<<i;
			case '-': *s+=1<<i;
			case '.': *s+=1<<i;
			case ',': *s+=1<<i;
					i+=4;
					break;
			case '[':
					*s++|=7<<i;
					i=sizeof(int)*8;
					a[p++]=s-f;
					break;
			case ']':
					if(--p<0) exit(1);
					*s++|=8<<i;
					i=sizeof(int)*8;
					f[a[p]]=s-f-a[p]+1;
					*s=a[p]-(s-f)+1;
					break;
			default: break;
			}
		if(i>=sizeof(int)*8) {i=0; *(++s)=0;}
		}
	fclose(z);
	if(p>0) exit(1);
	*(++s)=0;
	i=0;
	s=f;
	for(b=0; b<5000; b++) a[b]=0;
	b=*s++;
	while( b )
		{
		switch( (b>>i)&15 )
			{
			case 6: p--;   	break;
			case 5: p++;   	break;
			case 4: a[p]++;	break;
			case 3: a[p]--;	break;
			case 2: putchar(a[p]); fflush(stdout); break;
			case 1: a[p]=getchar();fflush(stdout); break;
			case 7: if(a[p]) s++; else s+=*s;
					i=-4; 	break;
			case 8: if(!a[p]) s++; else s+=*s;
					i=-4; 	break;
			default:		break;
			}
		i=(i+4)&(sizeof(int)*8-1);
		if( !i ) b=*s++;
		}
	}
}
