#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MIN(a,b) (((a)<(b))?(a):(b))
#define triangle (128+((agc*p*(abs(x%32)-16))/16))
#define fragments 32
#define poolsize (4*8*fragments)
const unsigned char barker[4] = {26,207,252,29};
int got=0;
int getchar_dummy(){
	if(4>got){
		return barker[got++];
	}
	return getchar();
}
int main(int argc,char *argv[]){
	int r,d,d2;
	unsigned char o;
	int x=0;
	int f = 0;
	int p = 1;
	int agc = 16;
	if(argc==2){
		unsigned char pool[poolsize]={0};
		for(;;){
			memmove(pool,pool+1,poolsize-1);
			if((r=getchar())<0){
				return 102;
			}
			pool[poolsize-1]=r;
			p=1;d=0;x=0;d2=0;
			int poolindex=0;
			int min=255;int max=0;
			for(int i = 0;poolsize>i;i++){
				if(min>pool[i]){
					min=pool[i];
				}
				if(max<pool[i]){
					max=pool[i];
				}
			}
			agc = 1 + max - min;
			//printf("%d-%d-%d\n",agc,min,max);
			for(int k = 0;4>k;k++){				
				for(int i = 0;8>i;i++){
					if((barker[k]>>i)&1){
						p*=-1;
					}
					for(int j = 0;fragments>j;j++){
						d+=abs(triangle - pool[poolindex]);
						d2+=abs((256-triangle) - pool[poolindex]);
						poolindex++;
						x++;
					}
				}
			}
			//printf("%d\n",d/agc);
			if((440>(d/agc))||(440>(d2/agc))){
				break;
			}
			
		}
		for(;;){
			o=0;
			for(int i = 0;8>i;i++){
				d=0;
				for(int j = 0;fragments>j;j++){
					if((r=getchar())<0){
						return 101;
					}
					d += abs(r-triangle);
					x++;				
				}
				d/=agc;
				if((f==1)!=(d>22)){
					o|=1<<i;
				}
				f=(d>22);
				
			}
			putchar(o);
		}
	}else{
		while((r=getchar_dummy())>-1){
			for(int i = 0;8>i;i++){
				if((r>>i)&1){
					p*=-1;
				}
				for(int j = 0;fragments>j;j++){
					putchar(triangle);
					x++;
				}
			}
		}
	}
	return 0;
}
