#include #include #include #include #include #include using namespace std; #define BIT_TOOGLE(num, index) (num) |= (1<<(index)) #define BIT_CLEAR(num, index) (num) &= ~(1<<(index)) #define BIT_SET_VALUE(num, index, bit) \ if(bit)\ BIT_TOOGLE(num,index);\ else\ BIT_CLEAR(num,index); bool bit_check(uint8_t num, uint8_t index){ uint8_t mask=pow(2,index); mask&=num; if(mask==pow(2,index)) return true; else return false; } int main(){ vector line, line_cur; vector >par; string x,y; getline(cin, x); getline(cin, y); uint8_t siz; if((y.size())%4==0) siz=(y.size())/4; else siz=(y.size())/4+1; vector temp2(siz,0); vector ans; for(unsigned short i=0;i<=x.size();++i) par.push_back(temp2); unsigned short m=x.size(); unsigned short n=y.size(); unsigned short cur; for(unsigned short i=0;i=prev){ cur=line[j]; par[i][j]=2; BIT_SET_VALUE(par[i][j],2*j%4+1,1); } else{ cur=prev; BIT_SET_VALUE(par[i][j],2*j%4,1); BIT_SET_VALUE(par[i][j],2*j%4+1,1); } } prev=cur; line_cur.push_back(cur); } line=line_cur; prev=0; line_cur.clear(); } while(true){ if(m==0||n==0) break; if(bit_check(par[m][n],2*n%4)&&!bit_check(par[m][n],2*n%4+1)){ --m; --n; ans.push_back(x[m]); } else{ if(!bit_check(par[m][n],2*n%4)&&bit_check(par[m][n],2*n%4+1)) --m; else --n; } } for(int i=ans.size()-1;i>=0;i--){ cout<