#include #include #include #include using namespace std; int n; vector pile[200]; int place[200]; pair Find(int k) { if(k < 0) return make_pair(-1, -1); int p = place[k]; for(int i = 0; i < (int)pile[p].size(); ++i) if(pile[p][i] == k) return make_pair(p, i); assert(0); return make_pair(0,0); } void Clear(int p, int i) { for(int j = i+1; j < (int)pile[p].size(); ++j) { int k = pile[p][j]; place[k] = k; pile[k].push_back(k); } pile[p].erase(pile[p].begin()+i, pile[p].end()); } void Move(int a, int b) { if(a == b) return; pair aa, bb; aa = Find(a); bb = Find(b); int pa = aa.first; int ia = aa.second; int pb = bb.first; int ib = bb.second; if(pb < 0) { if(ia == 0) return; Clear(pa, ia); pile[a].push_back(a); place[a] = a; } else if(pa == pb) { if(ia >= ib) return; Clear(pa, ia); pile[b].push_back(a); place[a] = b; } else { Clear(pa, ia); pile[pb].push_back(a); place[a] = pb; } } void Print() { for(int i = 0; i < n; ++i) if(!pile[i].empty()) { for(int j = 0; j < (int)pile[i].size(); ++j) cout << pile[i][j]+1<< " "; cout << endl; } cout << "<"; for(int i = 0; i < n; ++i) cout << place[i]+1 << " "; cout << ">"; cout << endl; } int main() { while(cin >> n && n) { for(int i = 0; i < n; ++i) { pile[i].clear(); pile[i].push_back(i); place[i] = i; } int a, b; while(cin >> a >> b && a) { --a; --b; Move(a,b); //Print(); } vector result; for(int i = 0; i < n; ++i) if(!pile[i].empty()) result.push_back(pile[i].size()); sort(result.begin(), result.end()); for(int i = 0; i < (int)result.size(); ++i) cout << result[i] << endl; cout << "end" << endl; } }