#include<iostream>
struct Status{
int buf[ 256 ] ;
int pos;
Status( ) : pos( 0 ) { }
Status add( ) {
buf[ pos] ++ ;
return * this ;
}
Status sub( ) {
buf[ pos] -- ;
return * this ;
}
Status let( ) {
pos-- ;
return * this ;
}
Status rit( ) {
pos++ ;
return * this ;
}
Status get( ) {
char p;
std:: cin .get ( p) ;
buf[ pos] = p;
return * this ;
}
Status put( ) {
std:: cout << char ( buf[ pos] ) ;
return * this ;
}
} ;
template < class T,class U> struct add{
Status operator ( ) ( Status s) {
return U( ) ( T( ) ( s) .add ( ) ) ;
}
} ;
template < class T,class U> struct sub{
Status operator ( ) ( Status s) {
return U( ) ( T( ) ( s) .sub ( ) ) ;
}
} ;
template < class T,class U> struct let{
Status operator ( ) ( Status s) {
return U( ) ( T( ) ( s) .let ( ) ) ;
}
} ;
template < class T,class U> struct rit{
Status operator ( ) ( Status s) {
return U( ) ( T( ) ( s) .rit ( ) ) ;
}
} ;
template < class T,class U> struct lop{
Status operator ( ) ( Status s) {
s= T( ) ( s) ;
while ( s.buf [ s.pos ] ) {
s= U( ) ( s) ;
}
return s;
}
} ;
template < class T,class U> struct get{
Status operator ( ) ( Status s) {
return U( ) ( T( ) ( s) .get ( ) ) ;
}
} ;
template < class T,int N> struct put{
Status operator ( ) ( Status s) {
s= T( ) ( s) ;
for ( int i= 0 ; i< 9 - N; i++ ) s= s.put ( ) ;
return s;
}
} ;
template < class T,int N= 9 > struct Brainfuck{
Brainfuck< T,N- 1 > _;
template < class U,int M> Brainfuck< add< put< T,N> ,put< U,M> > > operator + ( Brainfuck< U,M> ) {
return Brainfuck< add< put< T,N> ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< sub< put< T,N> ,put< U,M> > > operator - ( Brainfuck< U,M> ) {
return Brainfuck< sub< put< T,N> ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< let< put< T,N> ,put< U,M> > > operator < ( Brainfuck< U,M> ) {
return Brainfuck< let< put< T,N> ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< rit< put< T,N> ,put< U,M> > > operator > ( Brainfuck< U,M> ) {
return Brainfuck< rit< put< T,N> ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< get< put< T,N> ,put< U,M> > > operator , ( Brainfuck< U,M> ) {
return Brainfuck< get< put< T,N> ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< lop< put< T,N> ,put< U,M> > > operator [ ] ( Brainfuck< U,M> ) {
return Brainfuck< lop< put< T,N> ,put< U,M> > > ( ) ;
}
Status operator ( ) ( ) {
return T( ) ( Status( ) ) ;
}
} ;
template < class T> struct Brainfuck< T,0 > {
template < class U,int M> Brainfuck< add< put< T,0 > ,put< U,M> > > operator + ( Brainfuck< U,M> ) {
return Brainfuck< add< put< T,0 > ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< sub< put< T,0 > ,put< U,M> > > operator - ( Brainfuck< U,M> ) {
return Brainfuck< sub< put< T,0 > ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< let< put< T,0 > ,put< U,M> > > operator < ( Brainfuck< U,M> ) {
return Brainfuck< let< put< T,0 > ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< rit< put< T,0 > ,put< U,M> > > operator > ( Brainfuck< U,M> ) {
return Brainfuck< rit< put< T,0 > ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< get< put< T,0 > ,put< U,M> > > operator , ( Brainfuck< U,M> ) {
return Brainfuck< get< put< T,0 > ,put< U,M> > > ( ) ;
}
template < class U,int M> Brainfuck< lop< put< T,0 > ,put< U,M> > > operator [ ] ( Brainfuck< U,M> ) {
return Brainfuck< lop< put< T,0 > ,put< U,M> > > ( ) ;
}
Status operator ( ) ( ) {
return T( ) ( Status( ) ) ;
}
} ;
struct t{
Status operator ( ) ( Status s) {
return s;
}
} ;
Brainfuck< t> _;
int main( ) {
( _+ _+ _+ _+ _+ _+ _+ _+ _+ _[ _> _+ _+ _+ _+ _+ _+ _+ _+ _> _+ _+ _+ _+ _+ _+ _+ _+ _+ _+ _+ _> _+ _+ _+ _+ _+ _< _< _< _- _] > _._> _+ _+ _._+ _+ _+ _+ _+ _+ _+ _._._+ _+ _+ _._> _- _._- _- _- _- _- _- _- _- _- _- _- _- _._< _+ _+ _+ _+ _+ _+ _+ _+ _._- _- _- _- _- _- _- _- _._+ _+ _+ _._- _- _- _- _- _- _._- _- _- _- _- _- _- _- _._> _+ _._) ( ) ;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CgpzdHJ1Y3QgU3RhdHVzewoJaW50IGJ1ZlsyNTZdOwoJaW50IHBvczsKCVN0YXR1cygpOnBvcygwKXt9CglTdGF0dXMgYWRkKCl7CgkJYnVmW3Bvc10rKzsKCQlyZXR1cm4gKnRoaXM7Cgl9CglTdGF0dXMgc3ViKCl7CgkJYnVmW3Bvc10tLTsKCQlyZXR1cm4gKnRoaXM7Cgl9CglTdGF0dXMgbGV0KCl7CgkJcG9zLS07CgkJcmV0dXJuICp0aGlzOwoJfQoJU3RhdHVzIHJpdCgpewoJCXBvcysrOwoJCXJldHVybiAqdGhpczsKCX0KCVN0YXR1cyBnZXQoKXsKCQljaGFyIHA7CgkJc3RkOjpjaW4uZ2V0KHApOwoJCWJ1Zltwb3NdPXA7CgkJcmV0dXJuICp0aGlzOwoJfQoJU3RhdHVzIHB1dCgpewoJCXN0ZDo6Y291dDw8Y2hhcihidWZbcG9zXSk7CgkJcmV0dXJuICp0aGlzOwoJfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBVPiBzdHJ1Y3QgYWRkewoJU3RhdHVzIG9wZXJhdG9yICgpKFN0YXR1cyBzKXsKCQlyZXR1cm4gVSgpKFQoKShzKS5hZGQoKSk7Cgl9Cn07CnRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgVT4gc3RydWN0IHN1YnsKCVN0YXR1cyBvcGVyYXRvciAoKShTdGF0dXMgcyl7CgkJcmV0dXJuIFUoKShUKCkocykuc3ViKCkpOwoJfQp9Owp0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIFU+IHN0cnVjdCBsZXR7CglTdGF0dXMgb3BlcmF0b3IgKCkoU3RhdHVzIHMpewoJCXJldHVybiBVKCkoVCgpKHMpLmxldCgpKTsKCX0KfTsKdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBVPiBzdHJ1Y3Qgcml0ewoJU3RhdHVzIG9wZXJhdG9yICgpKFN0YXR1cyBzKXsKCQlyZXR1cm4gVSgpKFQoKShzKS5yaXQoKSk7Cgl9Cn07CnRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgVT4gc3RydWN0IGxvcHsKCVN0YXR1cyBvcGVyYXRvciAoKShTdGF0dXMgcyl7CgkJcz1UKCkocyk7CgkJd2hpbGUocy5idWZbcy5wb3NdKXsKCQkJcz1VKCkocyk7CgkJfQoJCXJldHVybiBzOwoJfQp9Owp0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIFU+IHN0cnVjdCBnZXR7CglTdGF0dXMgb3BlcmF0b3IgKCkoU3RhdHVzIHMpewoJCXJldHVybiBVKCkoVCgpKHMpLmdldCgpKTsKCX0KfTsKdGVtcGxhdGU8Y2xhc3MgVCxpbnQgTj4gc3RydWN0IHB1dHsKCVN0YXR1cyBvcGVyYXRvciAoKShTdGF0dXMgcyl7CgkJcz1UKCkocyk7CgkJZm9yKGludCBpPTA7aTw5LU47aSsrKXM9cy5wdXQoKTsKCQlyZXR1cm4gczsKCX0KfTsKCnRlbXBsYXRlPGNsYXNzIFQsaW50IE49OT4gc3RydWN0IEJyYWluZnVja3sKCUJyYWluZnVjazxULE4tMT4gXzsKCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxhZGQ8cHV0PFQsTj4scHV0PFUsTT4gPiA+IG9wZXJhdG9yICsgKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPGFkZDxwdXQ8VCxOPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxzdWI8cHV0PFQsTj4scHV0PFUsTT4gPiA+IG9wZXJhdG9yIC0gKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPHN1YjxwdXQ8VCxOPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxsZXQ8cHV0PFQsTj4scHV0PFUsTT4gPiA+IG9wZXJhdG9yIDwgKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPGxldDxwdXQ8VCxOPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxyaXQ8cHV0PFQsTj4scHV0PFUsTT4gPiA+IG9wZXJhdG9yID4gKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPHJpdDxwdXQ8VCxOPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxnZXQ8cHV0PFQsTj4scHV0PFUsTT4gPiA+IG9wZXJhdG9yICwgKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPGdldDxwdXQ8VCxOPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxsb3A8cHV0PFQsTj4scHV0PFUsTT4gPiA+IG9wZXJhdG9yIFtdIChCcmFpbmZ1Y2s8VSxNPil7CgkJcmV0dXJuIEJyYWluZnVjazxsb3A8cHV0PFQsTj4scHV0PFUsTT4gPiA+KCk7Cgl9CglTdGF0dXMgb3BlcmF0b3IgKCkoKXsKCQlyZXR1cm4gVCgpKFN0YXR1cygpKTsKCX0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBCcmFpbmZ1Y2s8VCwwPnsKCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxhZGQ8cHV0PFQsMD4scHV0PFUsTT4gPiA+IG9wZXJhdG9yICsgKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPGFkZDxwdXQ8VCwwPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxzdWI8cHV0PFQsMD4scHV0PFUsTT4gPiA+IG9wZXJhdG9yIC0gKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPHN1YjxwdXQ8VCwwPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxsZXQ8cHV0PFQsMD4scHV0PFUsTT4gPiA+IG9wZXJhdG9yIDwgKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPGxldDxwdXQ8VCwwPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxyaXQ8cHV0PFQsMD4scHV0PFUsTT4gPiA+IG9wZXJhdG9yID4gKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPHJpdDxwdXQ8VCwwPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxnZXQ8cHV0PFQsMD4scHV0PFUsTT4gPiA+IG9wZXJhdG9yICwgKEJyYWluZnVjazxVLE0+KXsKCQlyZXR1cm4gQnJhaW5mdWNrPGdldDxwdXQ8VCwwPixwdXQ8VSxNPiA+ID4oKTsKCX0KCXRlbXBsYXRlPGNsYXNzIFUsaW50IE0+IEJyYWluZnVjazxsb3A8cHV0PFQsMD4scHV0PFUsTT4gPiA+IG9wZXJhdG9yIFtdIChCcmFpbmZ1Y2s8VSxNPil7CgkJcmV0dXJuIEJyYWluZnVjazxsb3A8cHV0PFQsMD4scHV0PFUsTT4gPiA+KCk7Cgl9CglTdGF0dXMgb3BlcmF0b3IgKCkoKXsKCQlyZXR1cm4gVCgpKFN0YXR1cygpKTsKCX0KfTsKCnN0cnVjdCB0ewoJU3RhdHVzIG9wZXJhdG9yICgpKFN0YXR1cyBzKXsKCQlyZXR1cm4gczsKCX0KfTsKCkJyYWluZnVjazx0PiBfOwoKaW50IG1haW4oKXsKCShfK18rXytfK18rXytfK18rXytfW18+XytfK18rXytfK18rXytfK18+XytfK18rXytfK18rXytfK18rXytfK18+XytfK18rXytfK188XzxfPF8tX10+Xy5fPl8rXytfLl8rXytfK18rXytfK18rXy5fLl8rXytfK18uXz5fLV8uXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy5fPF8rXytfK18rXytfK18rXytfLl8tXy1fLV8tXy1fLV8tXy1fLl8rXytfK18uXy1fLV8tXy1fLV8tXy5fLV8tXy1fLV8tXy1fLV8tXy5fPl8rXy5fKSgpOwoJcmV0dXJuIDA7Cn0=