#include<stdio.h>
int main()
{
int n,m;//n表示测试数据的个数。m表示位数
int i,k;//i用于循环,k表示向高位的借位
int a[65],b[65],c[65];//a存原本的数。b存每一位的操作。c存需要的到的数
char ch;
__int64 number;
scanf("%d",&n);
for(;n>0;n--)
{
k=0;
scanf("%d ",&m);
for(i=m;i>0;i--)
{
scanf("%c",&ch);
if(ch=='p')
b[i]=1;
else
b[i]=-1;
}
scanf("%I64d",&number);
if(number<0)//当number为负数时只需将b反向就可以了
{
number=number*-1;
for(i=1;i<=m;i++)
b[i]=-1*b[i];
}
for(i=1;i<=m;i++)
{
c[i]=number%2;
number/=2;
}
for(i=1;i<=m;i++)
{
a[i]=(c[i]+k)%2;
if(k==0)
{
if(b[i]+c[i]==0)
k=1;
}
else
{
if(b[i]+c[i]==1)
k=0;
}
}
if(k==1)
printf("Impossible\n");
else
{
for(;m>0;m--)
printf("%d",a[m]);
printf("\n");
}
}
return 0;
}
#include<stdio.h>
int main()
{
int n,m;//n表示测试数据的个数。m表示位数
int i,k;//i用于循环,k表示向高位的借位
int a[65],b[65],c[65];//a存原本的数。b存每一位的操作。c存需要的到的数
char ch;
__int64 number;
scanf("%d",&n);
for(;n>0;n--)
{
k=0;
scanf("%d ",&m);
for(i=m;i>0;i--)
{
scanf("%c",&ch);
if(ch=='p')
b[i]=1;
else
b[i]=-1;
}
scanf("%I64d",&number);
if(number<0)//当number为负数时只需将b反向就可以了
{
number=number*-1;
for(i=1;i<=m;i++)
b[i]=-1*b[i];
}
for(i=1;i<=m;i++)
{
c[i]=number%2;
number/=2;
}
for(i=1;i<=m;i++)
{
a[i]=(c[i]+k)%2;
if(k==0)
{
if(b[i]+c[i]==0)
k=1;
}
else
{
if(b[i]+c[i]==1)
k=0;
}
}
if(k==1)
printf("Impossible\n");
else
{
for(;m>0;m--)
printf("%d",a[m]);
printf("\n");
}
}
return 0;
}