#include<bits/stdc++.h>
#define LL long long
using namespace std;
int code_search(string s);
void init();
void setnum(string s,int number);
map<string,int>code_data;
vector<int>code_pos;
vector<int>data_base;
int code_size;
struct single_plus{
string pos;
int plus;
single_plus(string pos,int plus){
this->pos=pos;
this->plus=plus;
}
};
struct object{
string name;
int code;
vector<single_plus>effect;
bool operator <(const object b)const{
return code<b.code;
}
void regist(string _name){
name=_name;
code=code_search(_name);
}
void add_effect(string s,int p){
single_plus ps(s,p);
effect.push_back(ps);
}
bool use(int times){
if(data_base[code]-times<0)return 0;
for(int i=0;i<effect.size();i++)
data_base[code_search(effect[i].pos)]+=effect[i].plus*times;
data_base[code]-=times;
return 1;
}
};
struct quality{
string name;
int code;
void regist(string _name,int prenum){
name=_name;
code=code_search(_name);
setnum(_name,prenum);
}
};
vector<object>ob_base;
vector<quality>ql_base;
int code_search(string s){
if(code_data[s]==0){
code_size++;
code_data[s]=code_size;
data_base.push_back(0);
}
return code_data[s];
}
void init(){
code_size=-1;
object ober;
ober.regist("empty_object");
ob_base.push_back(ober);
code_pos.push_back(0);
}
void setnum(string s,int number){
data_base[code_search(s)]=number;
}
void plusnum(string s,int number){
data_base[code_search(s)]+=number;
}
int getnum(string s){
return data_base[code_search(s)];
}
bool useob(string s,int _times){
return ob_base[code_pos[code_search(s)]].use(_times);
}
void ql_register(string s,int x){
quality ql;
ql.regist(s,x);
ql_base.push_back(ql);
code_pos.push_back(ql_base.size()-1);
}
void ob_register(string s){
object ober;
ober.regist(s);
ob_base.push_back(ober);
code_pos.push_back(ob_base.size()-1);
}
void add_effect(string ms,string s,int p){
ob_base[code_pos[code_search(ms)]].add_effect(s,p);
}
int main(){
//test lines
init();
int n;
cin>>n;
while(1){
switch(n){
case 1:{
for(int i=0;i<data_base.size();i++)
cout<<i<<' '<<data_base[i]<<endl;
break;
}
case 2:{
map<string,int>::iterator it;
for(it=code_data.begin();it!=code_data.end();it++)
cout<<it->first<<' '<<it->second<<endl;
break;
}
case 3:{
for(int i=0;i<ql_base.size();i++){
cout<<ql_base[i].name<<' '<<ql_base[i].code<<endl;
}
break;
}
case 4:{
for(int i=0;i<ob_base.size();i++){
cout<<ob_base[i].name<<' '<<ob_base[i].code<<endl;
for(int j=0;j<ob_base[i].effect.size();j++){
cout<<" ";
cout<<ob_base[i].effect[j].pos<<' ';
cout<<ob_base[i].effect[j].plus<<endl;
}
}
break;
}
case 5:{
int x,y;
string s,ms;
cin>>ms;
ob_register(ms);
cin>>s>>x;
while(s!="none"){
add_effect(ms,s,x);
cin>>s>>x;
}
break;
}
case 6:{
int x,y;
string s;
cin>>s>>x;
ql_register(s,x);
break;
}
case 7:{
string s;
int x;
cin>>s>>x;
setnum(s,x);
break;
}
case 8:{
string s;
int x;
cin>>s>>x;
plusnum(s,x);
break;
}
case 9:{
string s;
int x;
cin>>s>>x;
if(!useob(s,x))puts("failed!");
break;
}
}
cin>>n;
}
return 0;
}
ql_regisiter(s,x):quality register 特性变量注册,s为变量名,x为初始值
ob_regisiter(s):object register 物品变量注册,s为变量名
setnum(s,x):number setting 变量赋值,s为变量名,x为所赋值
plusnum(s,x):number plus 变量增值,s为变量名,x为增加值
getnum(s):number get 获取变量值,s为变量名
useob(s,x):use object 变量增值,s为变量名,x为使用量
add_effect(ms,s,x):add more effect 添加效果,ms为目标物品变量名,s为所要增加的物品/特性变量名,x为增加值
init():预加载