#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
struct posi
{
int n, x;
};
posi find_blocks(int n, int num);
void move_n_block(int a, int b, int ps);
void put_back (int n, int sit);
void print_blocks(int n);
vector <int> inp[30];
int main()
{
int n;
cin >>n;
for(int i = 0; i < n; ++i)
{
inp[i].push_back(i);
}
string c1, c2;
int a , b ;
while(cin>> c1 && c1 != "quit")
{
cin >>a >>c2 >>b;
posi pa = find_blocks(n, a);
posi pb = find_blocks(n, b);
if(pa.n == pb.n)
continue;
if(c1 == "move" && c2 == "onto")
{
put_back(pa.n, pa.x);
put_back(pb.n, pb.x);
}
if(c1 == "move" && c2 == "over")
put_back(pa.n, pa.x);
if(c1 == "pile" && c2 == "onto")
put_back(pb.n, pb.x);
move_n_block(pa.n, pb.n, pa.x);
//print_blocks(n);
}
print_blocks(n);
return 0;
}
posi find_blocks(int n, int num)
{
posi res;
for(int i = 0; i < n; ++i)
for(int j = 0; j < inp[i].size(); ++j)
if(inp[i][j] == num)
{
res.n = i;
res.x = j;
return res;
}
}
void put_back (int n, int sit)
{
//cout << "===========================" <<endl;
if(n == sit)
return;
for(int i = inp[n].size()-1; i > sit; --i)
{
int temp = inp[n][i];
inp[temp].push_back(temp);
inp[n].pop_back();
}
//inp[n].resize(sit);
}
void move_n_block(int a, int b, int ps)
{
for(int i = ps; i < inp[a].size(); ++i)
inp[b].push_back(inp[a][i]);
inp[a].resize(ps);
}
void print_blocks(int n)
{
for(int i = 0; i < n; ++i)
{
cout << i << ":";
for(int j = 0; j < inp[i].size(); ++j)
cout << " " << inp[i][j];
cout << endl;
}
}
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
struct posi
{
int n, x;
};
posi find_blocks(int n, int num);
void move_n_block(int a, int b, int ps);
void put_back (int n, int sit);
void print_blocks(int n);
vector <int> inp[30];
int main()
{
int n;
cin >>n;
for(int i = 0; i < n; ++i)
{
inp[i].push_back(i);
}
string c1, c2;
int a , b ;
while(cin>> c1 && c1 != "quit")
{
cin >>a >>c2 >>b;
posi pa = find_blocks(n, a);
posi pb = find_blocks(n, b);
if(pa.n == pb.n)
continue;
if(c1 == "move" && c2 == "onto")
{
put_back(pa.n, pa.x);
put_back(pb.n, pb.x);
}
if(c1 == "move" && c2 == "over")
put_back(pa.n, pa.x);
if(c1 == "pile" && c2 == "onto")
put_back(pb.n, pb.x);
move_n_block(pa.n, pb.n, pa.x);
//print_blocks(n);
}
print_blocks(n);
return 0;
}
posi find_blocks(int n, int num)
{
posi res;
for(int i = 0; i < n; ++i)
for(int j = 0; j < inp[i].size(); ++j)
if(inp[i][j] == num)
{
res.n = i;
res.x = j;
return res;
}
}
void put_back (int n, int sit)
{
//cout << "===========================" <<endl;
if(n == sit)
return;
for(int i = inp[n].size()-1; i > sit; --i)
{
int temp = inp[n][i];
inp[temp].push_back(temp);
inp[n].pop_back();
}
//inp[n].resize(sit);
}
void move_n_block(int a, int b, int ps)
{
for(int i = ps; i < inp[a].size(); ++i)
inp[b].push_back(inp[a][i]);
inp[a].resize(ps);
}
void print_blocks(int n)
{
for(int i = 0; i < n; ++i)
{
cout << i << ":";
for(int j = 0; j < inp[i].size(); ++j)
cout << " " << inp[i][j];
cout << endl;
}
}