#include #include #include using namespace std; struct Box { int index; Box * above; Box * below; }; int main() { int N; while(cin >> N && N) { Box * floor[N+1]; Box * box[N+1]; floor[0] = new Box(); floor[0]->above = NULL; floor[0]->below = NULL; for(int i = 1; i <= N; i++) { floor[i] = new Box(); box[i] = new Box(); floor[i]->above = box[i]; box[i]->below = floor[i]; box[i]->above = NULL; floor[i]->below = NULL; box[i]->index = i; floor[i]->index = -i; } int I, J; while(cin >> I >> J && I*I + J*J > 0) { Box * itr = box[I]; bool flag = false; while(itr->below) { if(itr->index == J) { flag = true; break; } itr = itr->below; } if(flag) { // ingnore continue; } if(J == 0 && box[I]->below->index <= 0) { // ingnore continue; } if(box[I]->above) { Box * itr_f; itr = box[I]; do { for(int i = 0; i <= N; i++) { if(floor[i]->above == NULL) { itr_f = floor[i]; break; } } itr_f->above = itr->above; itr->above->below = itr_f; itr->above = NULL; itr = itr_f->above; }while(itr->above); } if(J) { itr = box[J]; while(itr->above != NULL) { itr = itr->above; } box[I]->below->above = NULL; box[I]->below = itr; itr->above = box[I]; } else { itr = NULL; for(int i = 0; i <= N; i++) { if(floor[i]->above == NULL) { itr = floor[i]; break; } } itr->above = box[I]; box[I]->below->above = NULL; box[I]->below = itr; } } vector ans; for(int i = 0; i <= N; i++) { int cnt = 0; Box * itr = floor[i]; while(itr->above) { cnt++; itr = itr->above; } if(cnt) { ans.push_back(cnt); } } sort(ans.begin(), ans.end()); for(int i = 0; i < ans.size(); i++) { cout << ans[i] << endl; } cout << "end" << endl; } }