#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,k,n;
cout<<"Enter the message"<<endl;
string s,origin;
getline(cin,origin);
cout<<"Enter the key"<<endl;
string key;
cin>>key;
for(i=0;i<origin.size();i++)
{
if(origin[i]!=' ')
s+= origin[i];
}
vector<vector<char> > a(5,vector<char>(5,' '));
n=5;
map<char,int> mp;
k=0;
int pi,pj;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
while(mp[key[k]]>0&&k<key.size())
{
k++;
}
if(k<key.size())
{
a[i][j]=key[k];
mp[key[k]]++;
pi=i;
pj=j;
}
if(k==key.size())
break;
}
if(k==key.size())
break;
}
k=0;
for(;i<n;i++)
{
for(;j<n;j++)
{
while(mp[char(k+'a')]>0&&k<26)
{
k++;
}
if(char(k+'a')=='j')
{
j--;
k++;
continue;
}
if(k<26)
{
a[i][j]=char(k+'a');
mp[char(k+'a')]++;
}
}
j=0;
}
string ans;
if(s.size()%2==1)
s+="x";
for(i=0;i<s.size()-1;i++)
{
if(s[i]==s[i+1])
s[i+1]='x';
}
map<char,pair<int,int> > mp2;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
mp2[a[i][j]] = make_pair(i,j);
}
}
for(i=0;i<s.size()-1;i+=2)
{
int y1 = mp2[s[i]].first;
int x1 = mp2[s[i]].second;
int y2 = mp2[s[i+1]].first;
int x2 = mp2[s[i+1]].second;
if(y1==y2)
{
ans+=a[y1][(x1+1)%5];
ans+=a[y1][(x2+1)%5];
}
else if(x1==x2)
{
ans+=a[(y1+1)%5][x1];
ans+=a[(y2+1)%5][x2];
}
else
{
ans+=a[y1][x2];
ans+=a[y2][x1];
}
}
cout<<ans<<'\n';
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKXsKICAgIGludCBpLGosayxuOwogICAgY291dDw8IkVudGVyIHRoZSBtZXNzYWdlIjw8ZW5kbDsKICAgIHN0cmluZyBzLG9yaWdpbjsKICAgIGdldGxpbmUoY2luLG9yaWdpbik7CiAgICBjb3V0PDwiRW50ZXIgdGhlIGtleSI8PGVuZGw7CiAgICBzdHJpbmcga2V5OwogICAgY2luPj5rZXk7CiAgICBmb3IoaT0wO2k8b3JpZ2luLnNpemUoKTtpKyspCiAgICB7CiAgICAgICAgaWYob3JpZ2luW2ldIT0nICcpCiAgICAgICAgICAgIHMrPSBvcmlnaW5baV07CiAgICB9CiAgICB2ZWN0b3I8dmVjdG9yPGNoYXI+ID4gYSg1LHZlY3RvcjxjaGFyPig1LCcgJykpOwogICAgbj01OwogICAgbWFwPGNoYXIsaW50PiBtcDsKICAgIGs9MDsKICAgIGludCBwaSxwajsKICAgIGZvcihpPTA7aTxuO2krKykKICAgIHsKICAgICAgICBmb3Ioaj0wO2o8bjtqKyspCiAgICAgICAgewogICAgICAgICAgICB3aGlsZShtcFtrZXlba11dPjAmJms8a2V5LnNpemUoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaysrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGs8a2V5LnNpemUoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYVtpXVtqXT1rZXlba107CiAgICAgICAgICAgICAgICBtcFtrZXlba11dKys7CiAgICAgICAgICAgICAgICBwaT1pOwogICAgICAgICAgICAgICAgcGo9ajsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihrPT1rZXkuc2l6ZSgpKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYoaz09a2V5LnNpemUoKSkKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBrPTA7CiAgICBmb3IoO2k8bjtpKyspCiAgICB7CiAgICAgICAgZm9yKDtqPG47aisrKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUobXBbY2hhcihrKydhJyldPjAmJms8MjYpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGsrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihjaGFyKGsrJ2EnKT09J2onKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgICAgICBrKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihrPDI2KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhW2ldW2pdPWNoYXIoaysnYScpOwogICAgICAgICAgICAgICAgbXBbY2hhcihrKydhJyldKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaj0wOwogICAgfQoKICAgIHN0cmluZyBhbnM7CiAgICBpZihzLnNpemUoKSUyPT0xKQogICAgICAgIHMrPSJ4IjsKICAgIGZvcihpPTA7aTxzLnNpemUoKS0xO2krKykKICAgIHsKICAgICAgICBpZihzW2ldPT1zW2krMV0pCiAgICAgICAgICAgIHNbaSsxXT0neCc7CiAgICB9CgogICAgbWFwPGNoYXIscGFpcjxpbnQsaW50PiA+IG1wMjsKCiAgICBmb3IoaT0wO2k8bjtpKyspCiAgICB7CiAgICAgICAgZm9yKGo9MDtqPG47aisrKQogICAgICAgIHsKICAgICAgICAgICAgbXAyW2FbaV1bal1dID0gbWFrZV9wYWlyKGksaik7CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpPTA7aTxzLnNpemUoKS0xO2krPTIpCiAgICB7CiAgICAgICAgaW50IHkxID0gbXAyW3NbaV1dLmZpcnN0OwogICAgICAgIGludCB4MSA9IG1wMltzW2ldXS5zZWNvbmQ7CiAgICAgICAgaW50IHkyID0gbXAyW3NbaSsxXV0uZmlyc3Q7CiAgICAgICAgaW50IHgyID0gbXAyW3NbaSsxXV0uc2Vjb25kOwogICAgICAgIGlmKHkxPT15MikKICAgICAgICB7CiAgICAgICAgICAgIGFucys9YVt5MV1bKHgxKzEpJTVdOwogICAgICAgICAgICBhbnMrPWFbeTFdWyh4MisxKSU1XTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZih4MT09eDIpCiAgICAgICAgewogICAgICAgICAgICBhbnMrPWFbKHkxKzEpJTVdW3gxXTsKICAgICAgICAgICAgYW5zKz1hWyh5MisxKSU1XVt4Ml07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGFucys9YVt5MV1beDJdOwogICAgICAgICAgICBhbnMrPWFbeTJdW3gxXTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0PDxhbnM8PCdcbic7CiAgICByZXR1cm4gMDsKfQoKCgo=