#include <cstdio>
#include <vector>

using namespace std;

#define maxn 1010

int n, m;
char s1[maxn], s2[maxn];
char buffer[maxn];
vector<int> 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<offsets.size(); ++i)
    //    printf("%d\n", offsets[i]);

    for(int i=0; i<256; ++i)
        buffer[i]='0';

    while(s1[p1]>=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;
}