#include #include #include #include #include std::map > memo; std::map kyaku[21]; std::set sets; int main(){ int n; scanf("%d",&n); std::map tm; for(int i=0;i>t; if(t==0){ int no,m; std::string str; std::cin>>no>>m; if(sets.find(no)!=sets.end()){ printf("-1"); } sets.insert(no); for(int i=0;i>str; if(memo.find(str)==memo.end()){ memo[str]=tm; } memo[str][no]++; kyaku[no][str]++; } }else if(t==1){ std::cin>>str; if(memo.find(str)!=memo.end()){ if(memo[str].size()>0){ std::map::iterator it=memo[str].begin(); int no=(*it).first; printf("%d\n",no); (*it).second--; if((*it).second<=0){ memo[str].erase(no); } kyaku[no][str]--; if(kyaku[no][str]<=0){ kyaku[no].erase(str); } }else{ printf("-1\n"); } }else{ printf("-1\n"); } }else if(t==2){ int no; std::cin>>no; std::map::iterator it; if(sets.find(no)==sets.end()){ printf("-1"); } sets.erase(no); for(it=kyaku[no].begin();it!=kyaku[no].end();it++){ std::string str=(*it).first; int c=(*it).second; memo[str][no]-=c; if(memo[str][no]<=0){ memo[str].erase(no); } } kyaku[no].clear(); } } }