#include<bits/stdc++.h>
using namespace std;
struct wid
{
long long text;//交流数量
int favor;//喜爱程度
bool top;//是否被置顶
};
int main()
{
int T;
cin>>T;
for(int i=0;i<T;i++)
{
int n;
cin>>n;
deque<wid> line;
for(int j=1;j<=n;j++)
{
string str;
cin>>str;
int numstr=0;
if(str=="Add") numstr=1;
else if(str=="Close") numstr=2;
else if(str=="Chat") numstr=3;
else if(str=="Rotate") numstr=4;
else if(str=="Prior") numstr=5;
else if(str=="Choose") numstr=6;
else if(str=="Top") numstr=7;
else if(str=="Untop") numstr=8;
string MSG;
switch(numstr)
{
case 1://Add 不与某个窗口重复,则创建成功
{
int opt=0;
cin>>opt;
bool tag=false;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).favor==opt) tag=true;
}
if(tag) MSG="same likeness.";
else
{
MSG="success.";
wid newwid;
newwid.favor=opt;
newwid.text=0;
newwid.top=false;
line.push_back(newwid);
}
cout<<"OpId #"<<j<<":"<<" "<<MSG<<endl;
break;
}
case 2://关闭窗口
{
int opt=0;
cin>>opt;
bool tag=false;
deque<wid>::iterator p;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).favor==opt)
{
tag=true;
p=it;
break;
}
}
if(tag)
{
cout<<"OpId #"<<j<<":"<<" "<<"close "<<(*p).favor<<" with "<<(*p).text<<"."<<endl;
line.erase(p);
}
else{
cout<<"OpId #"<<j<<":"<<" "<<"invalid likeness."<<endl;
}
break;
}
case 3://Chat w
{
long long opt=0;
cin>>opt;
bool tag=false;
if(line.empty())
{
cout<<"OpId #"<<j<<":"<<" "<<"empty."<<endl;
}
else{
deque<wid>::iterator p;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).top) //存在顶层窗口
{
tag=true;
p=it;
break;
}
}
if(tag)//存在top
{
(*p).text+=opt;
}
else{//无top,取第一个
p=line.begin();
(*p).text+=opt;
}
cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
}
break;
}
case 4://Rotate
{
int opt=0;
cin>>opt;
if(opt>line.size()||opt<1)
cout<<"OpId #"<<j<<":"<<" "<<"out of range."<<endl;
else{
int x=0;
deque<wid>::iterator p;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
x++;
if(opt==x)
{
p=it;//第x个
break;
}
}
wid tmp;tmp.favor=(*p).favor;tmp.text=(*p).text;tmp.top=(*p).top;
line.erase(p);
line.push_front(tmp);//opt-1位置下的窗口放在队首
cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
}
break;
}
case 5://Prior 喜爱度最大放队首
{
bool tag=false;
if(line.empty())
{
cout<<"OpId #"<<j<<":"<<" "<<"empty."<<endl;
}
else{
deque<wid>::iterator p=line.begin();
int maxx=(*p).favor;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).favor>maxx)
{
maxx=(*it).favor;
p=it;
}
}
wid tmp;tmp.favor=(*p).favor;tmp.text=(*p).text;tmp.top=(*p).top;
line.erase(p);
line.push_front(tmp);
cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
}
break;
}
case 6://Choose
{
int opt=0;
cin>>opt;
bool tag=false;
deque<wid>::iterator p=line.begin();
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).favor==opt) //喜爱值为opt的窗口放在队首
{
tag=true;
p=it;
break;
}
}
wid tmp;tmp.favor=(*p).favor;tmp.text=(*p).text;tmp.top=(*p).top;
line.erase(p);
line.push_front(tmp);
if(tag) cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
else
cout<<"OpId #"<<j<<":"<<" "<<"invalid likeness."<<endl;
break;
}
case 7://Top
{
int opt=0;
cin>>opt;
bool tag=false;
//先置顶,再取消已有的状态
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).favor==opt) //喜爱值为opt的窗口置顶
{
tag=true;
(*it).top=true;
break;
}
}
if(tag)
{
cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 如果有顶层窗口,取消置顶
{
if((*it).top&&(*it).favor!=opt) //存在顶层窗口
{
(*it).top=false;
break;
}
}
}
else
cout<<"OpId #"<<j<<":"<<" "<<"invalid likeness."<<endl;
break;
}
case 8://Untop
{
bool tag=false;
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 如果有顶层窗口,取消置顶
{
if((*it).top) //存在顶层窗口
{
tag=true;
(*it).top=false;
break;
}
}
if(tag) cout<<"OpId #"<<j<<":"<<" "<<"success."<<endl;
else
cout<<"OpId #"<<j<<":"<<" "<<"no such person."<<endl;
break;
}
}
}
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列 如果有顶层窗口,取消置顶
{
if((*it).top) //存在顶层窗口
{
if((*it).text!=0) cout<<"OpId #"<<++n<<": "<<"Bye "<<(*it).favor<<": "<<(*it).text<<"."<<endl;//有对话
// line.erase(it);//删除顶层
break;
}
}
for(deque<wid>::iterator it=line.begin();it!=line.end();it++)//遍历队列
{
if((*it).text!=0&&(*it).top==false) cout<<"OpId #"<<++n<<":"<<" "<<"Bye "<<(*it).favor<<": "<<(*it).text<<"."<<endl;
}
}
}