/*
开始想的是 维护a的每个指数的系数
然而不好办 然而还有^10^10^10这种数据
特殊值带入吧 多搞几个素数 接下来就是玄学的事了
给a赋值之后 就是简单地表达式求值
虽然思路简单 但是字符串一向很恶心、、 数据括号有问题。。。。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 255
#define mod 10007
using namespace std;
int n,a,top1,top2,l,li,s1[maxn],s2[maxn];
int ans[6]={0,1007,1607,1847,2711,2713};
int target[6];
int order[100];
char s[maxn],si[maxn],c;
int Mi(int x,int y)
{
int ans=x;
for(int i=2;i<=y;i++)
ans=(ans*x)%mod;
return ans;
}
int Go(int x,int y,char z)
{
if(z==45)return (x-y+mod)%mod;
if(z==43)return (x+y)%mod;
if(z==42)return (x*y)%mod;
if(z==94)return Mi(x,y);
}
int main()
{
order[45]=order[43]=1;
order[42]=2;order[94]=3;
gets(si);li=strlen(si+1);l=0;
for(int i=0;i<=li;i++)
if(si[i]==' ')continue;
else s[++l]=si[i];
s[0]='(';s[++l]=')';
for(int k=1;k<=5;k++)
{
a=ans[k];int i=0;top1=top2=0;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
while(i<=l)
{
if(s[i]=='a')
{
if(top1>=1&&s[i-1]>='0'&&s[i-1]<='9')
{
int tmp=s1[top1];
s1[top1]=a*tmp%mod;
}
else top1=top1+1,s1[top1]=a;
}
if(s[i]>='0'&&s[i]<='9')
{
int x=0;
while(s[i]>='0'&&s[i]<='9'){x=x*10+s[i]-'0';i++;}
top1=top1+1;s1[top1]=x;i=i-1;
}
else
{
if(s[i]=='(')top2=top2+1,s2[top2]=s[i];
if(s[i]=='^')
{
int x=0;i=i+1;int r=s1[top1];
while(s[i]>='0'&&s[i]<='9'){x=x*10+s[i]-'0';i++;}
s1[top1]=Go(r,x,'^');i=i-1;
}
if(s[i]=='+'||s[i]=='-'||s[i]=='*')
{
if(order[s[i]]<=order[s2[top2]])
{
while(order[s[i]]<=order[s2[top2]])
{
int r1=s1[top1];top1=top1-1;
int r2=s1[top1];top1=top1-1;
int r3=Go(r2,r1,s2[top2]);
top2=top2-1;top1=top1+1;s1[top1]=r3;
}
top2=top2+1;s2[top2]=s[i];
}
else if(order[s[i]]>order[s2[top2]])top2=top2+1,s2[top2]=s[i];
}
if(s[i]==')')
{
while(s2[top2]!='('&&top2)
{
int r1=s1[top1];top1=top1-1;
int r2=s1[top1];top1=top1-1;
int r3=Go(r2,r1,s2[top2]);
top2=top2-1;top1=top1+1;s1[top1]=r3;
}
top2=top2-1;
}
}
i=i+1;
}
target[k]=s1[1];
}
scanf("%d",&n);c=getchar();
for(int p=1;p<=n;p++)
{
li=0;memset(si,0,sizeof(si));
gets(si);li=strlen(si+1);l=0;
for(int i=0;i<=li;i++)
if(si[i]==' ')continue;
else s[++l]=si[i];
s[0]='(';s[++l]=')';int sum=0;
for(int k=1;k<=5;k++)
{
a=ans[k];int i=0;top1=top2=0;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
while(i<=l)
{
if(s[i]=='a')
{
if(top1>=1&&s[i-1]>='0'&&s[i-1]<='9')
{
int tmp=s1[top1];
s1[top1]=a*tmp%mod;
}
else top1=top1+1,s1[top1]=a;
}
if(s[i]>='0'&&s[i]<='9')
{
int x=0;
while(s[i]>='0'&&s[i]<='9'){x=x*10+s[i]-'0';i++;}
top1=top1+1;s1[top1]=x;i=i-1;
}
else
{
if(s[i]=='(')top2=top2+1,s2[top2]=s[i];
if(s[i]=='^')
{
int x=0;i=i+1;int r=s1[top1];
while(s[i]>='0'&&s[i]<='9'){x=x*10+s[i]-'0';i++;}
s1[top1]=Go(r,x,'^');i=i-1;
}
if(s[i]=='+'||s[i]=='-'||s[i]=='*')
{
if(order[s[i]]<=order[s2[top2]])
{
while(order[s[i]]<=order[s2[top2]])
{
int r1=s1[top1];top1=top1-1;
int r2=s1[top1];top1=top1-1;
int r3=Go(r2,r1,s2[top2]);
top2=top2-1;top1=top1+1;s1[top1]=r3;
}
top2=top2+1;s2[top2]=s[i];
}
if(order[s[i]]>order[s2[top2]])top2=top2+1,s2[top2]=s[i];
}
if(s[i]==')')
{
while(s2[top2]!='('&&top2)
{
int r1=s1[top1];top1=top1-1;
int r2=s1[top1];top1=top1-1;
int r3=Go(r2,r1,s2[top2]);
top2=top2-1;top1=top1+1;s1[top1]=r3;
}
top2=top2-1;
}
}
i=i+1;
}
if(s1[1]==target[k])sum++;
}
if(sum==5)printf("%c",'A'-1+p);
}
return 0;
}