WA了后面的四个点
#include<bits/stdc++.h>
#define int long long
#define mod 1000000009
using namespace std;
int n;
bool f[27];
string s,p[27];
struct node{int unknown,res;}data[11];
string func(string t){
string y="";
for(int i=0;i<t.length();++i) if(t[i]!=' ') y+=t[i];
return y;
}
int Qpow(int z,int e){
if(!e) return 1;
if(e==1) return z%mod;
if(e%2) return (Qpow(z,e/2)*Qpow(z,e/2+1))%mod;
else return (Qpow(z,e/2)*Qpow(z,e/2))%mod;
}
int calc(string t,int a){
int opcnt=0,prrt=0,p[51],id=0;
memset(p,0x7f,sizeof(p));
for(int i=t.length()-1;i>=0;--i){
if(t[i]=='(') prrt-=65536;
if(t[i]==')') prrt+=65536;
if(t[i]=='+') p[i]=prrt+1,opcnt=1;
if(t[i]=='-') p[i]=prrt+1,opcnt=1;
if(t[i]=='*') p[i]=prrt+2,opcnt=1;
if(t[i]=='^') p[i]=prrt+3,opcnt=1;
if(p[i]<p[id]) id=i;
}
if(!opcnt){
int x=0;
for(int i=0;i<t.length();++i) if(t[i]=='a') return a;
for(int i=0;i<t.length();++i) if(isdigit(t[i])) x=(x<<3)+(x<<1)+t[i]-48;
return x;
}
if(t[id]=='^') return Qpow(calc(t.substr(0,id),a),calc(t.substr(id+1,t.length()-id-1),a));
if(t[id]=='*') return calc(t.substr(0,id),a)*calc(t.substr(id+1,t.length()-id-1),a)%mod;
if(t[id]=='+') return calc(t.substr(0,id),a)+calc(t.substr(id+1,t.length()-id-1),a)%mod;
if(t[id]=='-') return calc(t.substr(0,id),a)-calc(t.substr(id+1,t.length()-id-1),a)%mod;
}
signed main(){
srand(time(NULL));
for(int i=1;i<=n;++i) data[i].unknown=rand();
getline(cin,s);
s=func(s);
for(int i=1;i<=10;++i) data[i].res=calc(s,data[i].unknown);
scanf("%lld",&n);
getchar();
getchar();
for(int i=1;i<=n;++i){
f[i]=1;
getline(cin,p[i]);
p[i]=func(p[i]);
for(int j=1;j<=10;++j) if(calc(p[i],data[j].unknown)!=data[j].res) f[i]=0;
}
for(int i=1;i<=n;++i) if(f[i]) putchar('@'+i);
return 0;
}