#include<bits/stdc++.h>
#define err cout<<"ERROR\n"//报错
#define BOTTOM ((long long)(1<<31))//栈底元素
#define check(a) ((a)>1000000000?1:0)//检查
using namespace std;
stack<int>s;
string step[20010];
long long num[20010],n,len;
void init()
{
while(!s.empty()) s.pop();
s.push(BOTTOM);//防止溢出
}
bool numx(long long x)// NUM x 栈顶放入 x
{
if(check(abs(x))) return 0;
s.push(x);
return 1;
}
bool pop()// POP 抛弃栈顶元素
{
if(s.size()<2) return 0;
s.pop();
return 1;
}
bool inv()// INV 将栈顶元素取出, 然后放入它的相反数
{
if(s.size()<2) return 0;
long long tmp=-s.top();
s.pop();
s.push(tmp);
return 1;
}
bool dup()// DUP 再放入一个和栈顶元素相同的数
{
if(s.size()<2) return 0;
long long tmp=s.top();
s.push(tmp);
return 1;
}
bool swp()// SWP 交换栈顶的两个元素
{
if(s.size()<3) return 0;
long long tmp=s.top(),tmp1;
s.pop();
tmp1=s.top();
s.pop();
s.push(tmp);
s.push(tmp1);
return 1;
}
bool add()// ADD 取出栈顶的两个元素, 两元素相加, 所得结果放入栈内
{
if(s.size()<3) return 0;
long long tmp=s.top(),tmp1;
s.pop();
tmp1=s.top();
s.pop();
if(check(abs(tmp1+tmp))) return 0;
s.push(tmp1+tmp);
return 1;
}
bool sub()// SUB 取出栈顶的两个元素, 第二个元素减去第一个元素, 所得结果放入栈内
{
if(s.size()<3) return 0;
long long tmp=s.top(),tmp1;
s.pop();
tmp1=s.top();
s.pop();
if(check(abs(tmp1-tmp))) return 0;
s.push(tmp1-tmp);
return 1;
}
bool mul()// MUL 取出栈顶的两个元素, 两元素相乘, 所得结果放入栈内
{
if(s.size()<3) return 0;
long long tmp=s.top(),tmp1;
s.pop();
tmp1=s.top();
s.pop();
if(check(abs(tmp1*tmp))) return 0;
s.push(tmp1*tmp);
}
bool divn()// DIV 取出栈顶的两个元素, 第二个元素整除以第一个元素, 所得结果放入栈内
{
if(s.size()<3) return 0;
long long tmp=s.top(),tmp1;
s.pop();
tmp1=s.top();
s.pop();
if(tmp==0) return 0;
if(check(abs(tmp1/tmp))) return 0;
s.push(tmp1/tmp);
return 1;
}
bool mod()// MOD 取出栈顶的两个元素, 第二个元素取模以第一个元素, 所得结果放入栈内
{
if(s.size()<3) return 0;
long long tmp=s.top(),tmp1;
s.pop();
tmp1=s.top();
s.pop();
if(tmp==0) return 0;
if(check(abs(tmp1%tmp))) return 0;
s.push(tmp1%tmp);
return 1;
}
bool ope(int i)// 第 i 个操作
{
if(step[i]=="NUM")
{
if(!numx(num[i])) return 0;
}
else if(step[i]=="POP")
{
if(!pop()) return 0;
}
else if(step[i]=="INV")
{
if(!inv()) return 0;
}
else if(step[i]=="DUP")
{
if(!dup()) return 0;
}
else if(step[i]=="SWP")
{
if(!swp()) return 0;
}
else if(step[i]=="ADD")
{
if(!add()) return 0;
}
else if(step[i]=="SUB")
{
if(!sub()) return 0;
}
else if(step[i]=="MUL")
{
if(!mul()) return 0;
}
else if(step[i]=="DIV")
{
if(!divn()) return 0;
}
else if(step[i]=="MOD")
{
if(!mod()) return 0;
}
else return 0;
return 1;
}
bool f(long long x)// f(x)
{
if(check(abs(x))) return 0;
s.push(x);
for(int i=0;i<len;++i)
{
if(!ope(i)) return 0;
}
if(s.size()!=2) return 0;
return 1;
}
void getstep()// 读取
{
len=0;
memset(num,0,sizeof(long long)*2010);
while(cin>>step[len])
{
if(step[len]=="NUM")
{
cin>>num[len];
if(check(abs(num[len])))
{
err;
num[len]=0;
continue;
}
}
else if(step[len]=="END") return;
++len;
}
}
int main()
{
long long x;
getstep();
cin>>n;
while(n--)
{
init();
cin>>x;
if(f(x)) cout<<s.top()<<"\n";
else err;
}
return 0;
}
RE原因是数组越界
玄关求调!