// poj 1026 Cipher
/*
一直超时,到后来才发现其实很简单,但是代码已经写得很乱了。
主要是预处理一下,对于每一个i上的字符加密一定次数后,结果会构成一个
循环,也就是回到i的位置,如果我们求出这个循环周期,并把路径记录下来,
那么就可以使用取余运算确定最终第i个字符的位置了。
*/
#include <iostream>
#include <algorithm>
using namespace std;
const int inf = 1<<29;
int n,k;
int input[201];
int a[2][201];
char str[210],temp[210];
int ans[210][210];
int mark[210];
void cal() //预处理,主要是要观察到其循环性
{
memset(mark,0,sizeof(mark));
int c=1,sum=0;
for (int i=1;i<=n;i++) { a[1][i]=i;ans[i][0]=0;}
while (sum<n)
{
for (int i=1;i<=n;i++)
{
int j=a[c][i];
a[c^1][input[i]]=j;
if (!mark[j]) {
ans[j][++ans[j][0]]=input[i];
if (input[i]==j) {
mark[j]=1;
++sum;
}
}
}
c^=1;
}
}
int d[210];
void solve()
{
for (int i=1;i<=n;i++)
if (k%ans[i][0]==0) d[i]=i;
else d[i]=ans[i][k%ans[i][0]];
}
int main()
{
while (scanf("%d",&n) && n)
{
for (int i=1;i<=n;i++) scanf("%d",&input[i]);
cal();
while (scanf("%d",&k) && k)
{
gets(str);
int len=strlen(str+1);
for (;len<n;++len) str[len+1]=' ';
solve();
for (int i=1;i<=n;i++)
temp[d[i]]=str[i];
temp[n+1]=0;
printf("%s/n",temp+1);
}
printf("/n");
}
system("pause");
return 0;
}