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

struct T {
    int v, e;
    T(){}
    T(int v, int e): v(v), e(e){}
};
vector<T> g[100010];
int K, res[100010];

void dfs(int v, int p, int c)
{
    if (K<c) K=c;
    int k=0;
    for(auto& x: g[v]) if (x.v!=p) {
        if (++k==c) ++k;
        res[x.e]=k;
        dfs(x.v, v, k);
    }
}

int main()
{
    int n; cin>>n;
    for(int i=0; i<n-1; ++i) {
        int a, b; cin>>a>>b;
        --a, --b;
        g[a].emplace_back(b, i);
        g[b].emplace_back(a, i);
    }
    dfs(0, -1, 0);
    cout<<K<<endl;
    for(int i=0; i<n-1; ++i) cout<<res[i]<<'\n';
}
