// Memory: 720K Time: 16MS
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
void strrev(char str[], int n)
{
for(int i=0; i < n/2; i++)
{
char t = str[i];
str[i] = str[n-i-1];
str[n-i-1] = t;
}
}
char data[70];
char re[70];
int main()
{
intn;
scanf("%d",&n);
while(n--)
{
long long len, num;
scanf("%lld", &len);
scanf("%s", data);
scanf("%lld", &num);
strrev(data, len);
for (int i=1; i <= len; i++)
{
//cout << num%(int)pow(2.0,i+0.0);
if (num % (long long)pow(2.0, i+0.0) != 0)
{
re[i-1] = '1';
if (data[i-1] == 'p')
{
num -= (long long)pow(2.0,i-1.0);
}
else
{
num += (long long)pow(2.0,i-1.0);
}
}
else
re[i-1] = '0';
}
if (num != 0)
printf("Impossible\n");
else
{
re[len] = 0;
strrev(re, len);
printf("%s\n", re);
}
}
return0;
}
刚开始加减那个地方没想通,后来发现人家是用num来减,减成0了就算成功