#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;


void searchPoint(vector<vector<int> > &pileSet,pair<int,int> &p){

}

int main(){

    int m;
    while(cin>>m&&m!=0){
        int s,d;
        vector<vector<int> > pileSet;
        for(int i = 0; i < m; i++)
            pileSet.push_back(vector<int>(1,i+1));
        while(cin>>s>>d&&!(s==0&&d==0)){
            if(s==d)
                continue;
            // sðT·
            pair<int,int> sp;
            for(int i = 0; i < pileSet.size(); i++){
                for(int j = pileSet[i].size()-1; j >= 0; j--){
                    if(pileSet[i][j]==s){
                        sp.first=i;sp.second=j;
                    }
                }
            }
            // dðT·
            pair<int,int> dp;
            for(int i = 0; i < pileSet.size(); i++){
                for(int j = pileSet[i].size()-1; j >= 0; j--){
                    if(pileSet[i][j]==d){
                        dp.first=i;dp.second=j;
                    }
                }
            }
            if(d==0){
                if(pileSet[sp.first][0]==s)
                    continue;
                // sÌãÉÂñÅ êÎA»êà¨ë·
                for(int i = pileSet[sp.first].size()-1;i>=0;i--){
                    int num=pileSet[sp.first][i];
                    // ¨ë·
                    pileSet[sp.first].erase(pileSet[sp.first].begin()+i);
                    pileSet.push_back(vector<int>(1,num));
                    if(num==s)
                        break;
                }
            }
            // sÆdÌlÉæÁÄêí¯
            else if(dp.first==sp.first){
                if(dp.second>sp.second){
                    for(int i = pileSet[dp.first].size()-1; i >=0; i--){
                        int num=pileSet[dp.first][i];
                        if(num==s){
                            pileSet[dp.first].erase(pileSet[dp.first].begin()+i);
                            break;
                        }
                        pileSet[dp.first].erase(pileSet[dp.first].begin()+i);
                        pileSet.push_back(vector<int>(1,num));
                    }
                    // sðæ¹é
                    bool fin=false;
                    for(int i = 0; i < pileSet.size(); i++){
                        for(int j = 0; j < pileSet[i].size(); j++){
                            if(pileSet[i][j]==d){
                                pileSet[i].push_back(s);
                                fin=true;break;
                            }
                        }
                        if(fin)break;
                    }
                }
            }
            // ÊÌRÖÌÚ®Ìê
            else{
                // Ü¸sÌãÉ éÉàÂð¨ë·
                for(int i = pileSet[sp.first].size()-1;i>=0;i--){
                    int num=pileSet[sp.first][i];
                    // ¨ë·
                    pileSet[sp.first].erase(pileSet[sp.first].begin()+i);
                    if(num==s)
                        break;
                    else
                        pileSet.push_back(vector<int>(1,num));
                }
                // dÌRÌãÉæÁ¯é
                pileSet[dp.first].push_back(s);
            }
            // óÌpileÍí
            for(int i = pileSet.size()-1; i>=0; i--){
                if(pileSet[i].size()==0)
                    pileSet.erase(pileSet.begin()+i);
            }
        }
        priority_queue<int,vector<int>,greater<int> > pq;
        for(int i = 0; i < pileSet.size(); i++)
            pq.push(pileSet[i].size());
        while(!pq.empty()){
            cout<<pq.top()<<endl;pq.pop();
        }
        cout<<"end"<<endl;
    }
    return 0;
}

Measured memory_bytes: 0