#include #include using namespace std; #define maxn 1010 int n, m; char s1[maxn], s2[maxn]; char buffer[maxn]; vector offsets; void getOffsets() { int p=0; int hadComma=0, nr=0; while(s1[p]>=32) { if(s1[p]==',') { if(hadComma) { offsets.push_back(nr); nr=0; } else hadComma=1; s1[p]=0; ++p; continue; } if(!hadComma) { ++p; continue; } nr=nr*10+s1[p]-'0'; ++p; } offsets.push_back(nr); } void writeToBuffer(long long nr, int poz) { poz*=2; while(nr>0) { long long r=nr%16; if(r<=9) buffer[poz++]='0'+r; else buffer[poz++]='A'+r-10; nr/=16; } } int main() { // freopen("scanf.in", "r", stdin); // freopen("scanf.out", "w", stdout); fgets(s1, maxn, stdin); fgets(s2, maxn, stdin); getOffsets(); int p1=0, p2=0, pz=0; // for(int i=0; i=32) { if(s1[p1]==' ') { while(s1[p1]==' ') ++p1; while(s2[p2]==' ') ++p2; continue; } if(s1[p1]=='%') { ++p1; if(s1[p1]=='c') { writeToBuffer(s2[p2], offsets[pz]); ++p2; } if(s1[p1]=='s') { while(s2[p2]>32) { writeToBuffer(s2[p2], offsets[pz]); offsets[pz]++; ++p2; } } if(s1[p1]=='u') { long long nr=0; while(s2[p2]>='0' && s2[p2]<='9') { nr=nr*10+s2[p2]-'0'; ++p2; } writeToBuffer(nr, offsets[pz]); } if(s1[p1]=='x') { p2+=2; long long nr=0; while((s2[p2]>='0' && s2[p2]<='9') || (s2[p2]>='A' && s2[p2]<='F')) { if(s2[p2]<='9') nr=nr*16+s2[p2]-'0'; else nr=nr*16+s2[p2]-'A'+10; ++p2; } writeToBuffer(nr, offsets[pz]); } ++p1; ++pz; } else { ++p1; ++p2; } // printf("%d %d\n", p1, p2); } for(int i=0; i<128; ++i) printf("%c%c", buffer[i*2+1], buffer[i*2]); printf("\n"); return 0; }