#include<iostream>
#include<list>//双向链表
#include<vector>//动态数组
#include<string>//string类
#include<iterator>//迭代器
using namespace std;
list<int>& FindList(vector<list<int> >& b,int id)//传入我们的vector a和对应的id
//用FindList这个函数返回我们需要找的list
{
int tmp=b.size();
if(tmp>0)
{
vector<list<int> >::iterator j;//开一个int型的list迭代器
j=b.begin();
return *(j+id-1);
}
}
int main()
{
int n;
cin>>n;
vector<list<int> >a;//纵为verctor 横为list
while(n--)
{
string command;
cin>>command;
if(command=="new")
{
int id;
cin>>id;
a.push_back(list<int>());//往下推verctor,即开一条list
}
if(command=="add")
{
int id,num;
cin>>id>>num;
list<int>& temp=FindList(a,id);
temp.push_back(num);
temp.sort();//将list中的元素按"<"规定的比较方法升序排序,list还有其他sort成员函数
}
if(command=="merge")
{
int id1,id2;
cin>>id1>>id2;
list<int>& temp1=FindList(a,id1);//在a中找到名为id1的list并给它另一个名字temp1
list<int>& temp2=FindList(a,id2);
temp1.sort();
temp2.sort();
temp1.merge(temp2);//合并清空temp2(不是删除temp2)
}
if(command=="unique")
{
int id;
cin>>id;
list<int>& temp=FindList(a,id);
temp.sort();
temp.unique();//排序清除同元素
}
if(command=="out")
{
int id;
cin>>id;
list<int>& temp=FindList(a,id);
temp.sort();
if(temp.size()>0)
{//双向迭代器(list不支持<temp.end()不支持temp[i] 随机访问迭代器
list<int>::iterator j;//非常量迭代器 改变所指向的容器内的内容
int len=0;
for(j=temp.begin();j!=temp.end();j++)len++;
//如果写j!=temp.rbegin就会提示没有重载!=,这体现了iterator和reverse_iterator不兼容
j=temp.begin();
for(int i=0;i<len-1;i++)
{
cout<<*j<<" ";
j++;
}
cout<<*j<<endl;//引入len保证最后一个字符不打空格
}
else cout<<endl;
}
}
return 0;
}