#Description
模拟
#Algorithm
模拟
学习Vector用
#Hint
HDU 也有这题 用这个代码会 PE
UVa 能AC
#Code
#include <iostream>
#include <vector>
using namespace std;
const int maxn = 25 + 9;
int n;
vector<int> p[maxn];
struct V
{
int p, h;
V(){}
V(int p, int h):p(p), h(h){}
};
V findx(const int &a)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < p[i].size(); j++)
if (p[i][j] == a) return V(i, j);
}
void reset(V l)
{
for (int i = p[l.p].size() - 1; i > l.h; i--)
{
int now = p[l.p][i];
p[now].push_back(now);
p[l.p].pop_back();
}
}
void movex(V la, V lb)
{
for (int i = la.h; i < p[la.p].size(); i++)
p[lb.p].push_back(p[la.p][i]);
p[la.p].resize(la.h);
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++) p[i].push_back(i);
for (;;)
{
string s[2];
cin >> s[0];
if (s[0] == "quit") break;
int a, b;
cin >> a >> s[1] >> b;
V la = findx(a);
V lb = findx(b);
if (la.p == lb.p) continue;
if (s[0] == "move" && s[1] == "onto")
{
reset(la);
reset(lb);
p[la.p].pop_back();
p[lb.p].push_back(a);
}else if (s[0] == "move" && s[1] == "over")
{
reset(la);
p[la.p].pop_back();
p[lb.p].push_back(a);
}else if (s[0] == "pile" && s[1] == "onto")
{
reset(lb);
movex(la, lb);
}else movex(la, lb);
}
for (int i = 0; i < n; i++)
{
cout << i << ":";
for (int j = 0; j < p[i].size(); j++)
cout << " " << p[i][j];
cout << endl;
}
}