/*Author: Rishul Aggarwal*/
#include<bits/stdc++.h>
#define mod 1000000007
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define in(type,x) scanf("%" #type,&x)
#define debug(args...) {dbg,args; cerr<<endl;}
#define test int t;\
in(d,t);\
while(t--)
using namespace std;
struct debugger
{template<typename T> debugger& operator,(const T& v)
{cerr<< v <<" ";
return *this;
}
}dbg;
ll gcd(ll a,ll b) {if(b==0) return a; return gcd(b,a%b);}
ll power(ll b,ll exp,ll m) {ll ans=1; b%=m; while(exp){if(exp&1) ans=(ans*b)%m; exp>>=1; b=(b*b)%m; } return ans; }
vector<vector<int> >g;
int n,v[1000002],d[1000002];
int bfs(int start)
{
v[start]=1;
d[start]=1;
queue<int>q;
q.push(start);
while((!q.empty()))
{
int next=q.front();
q.pop();
for(int i=0;i<g[next].size();i++)
{if(v[g[next][i]]==0)
{
v[g[next][i]]=1;
d[g[next][i]]=d[next]+1;
q.push(g[next][i]);
}
}
}
int ans=0;
rep(i,1,n)
cout<<d[i]<<" ";
cout<<endl;
rep(i,1,n)
ans=max(ans,d[i]);
return ans;
}
int main()
{
in(d,n);
g.resize(n+2);
rep(i,1,n-1)
{
int x,y;
in(d,x),in(d,y);
g[x].push_back(y),g[y].push_back(x);
}
cout<<bfs(1);
return 0;
}
LypBdXRob3I6IFJpc2h1bCBBZ2dhcndhbCovCgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHJlcChpLGEsYikgZm9yKGludCBpPWE7aTw9YjtpKyspCiNkZWZpbmUgaW4odHlwZSx4KSBzY2FuZigiJSIgI3R5cGUsJngpCiNkZWZpbmUgZGVidWcoYXJncy4uLikge2RiZyxhcmdzOyBjZXJyPDxlbmRsO30KI2RlZmluZSB0ZXN0IGludCB0O1wKCQkJIGluKGQsdCk7XAoJCQkgd2hpbGUodC0tKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBkZWJ1Z2dlcgp7dGVtcGxhdGU8dHlwZW5hbWUgVD4gZGVidWdnZXImIG9wZXJhdG9yLChjb25zdCBUJiB2KQoge2NlcnI8PCB2IDw8IiAiOwogIHJldHVybiAqdGhpczsKIH0KfWRiZzsKCmxsIGdjZChsbCBhLGxsIGIpIHtpZihiPT0wKSByZXR1cm4gYTsgcmV0dXJuIGdjZChiLGElYik7fQoKbGwgcG93ZXIobGwgYixsbCBleHAsbGwgbSkge2xsIGFucz0xOyBiJT1tOyB3aGlsZShleHApe2lmKGV4cCYxKSBhbnM9KGFucypiKSVtOyBleHA+Pj0xOyBiPShiKmIpJW07IH0gcmV0dXJuIGFuczsgfQoKdmVjdG9yPHZlY3RvcjxpbnQ+ID5nOwppbnQgbix2WzEwMDAwMDJdLGRbMTAwMDAwMl07CgppbnQgYmZzKGludCBzdGFydCkKewoJdltzdGFydF09MTsKCWRbc3RhcnRdPTE7CglxdWV1ZTxpbnQ+cTsKCXEucHVzaChzdGFydCk7Cgl3aGlsZSgoIXEuZW1wdHkoKSkpCgl7CgkJaW50IG5leHQ9cS5mcm9udCgpOwoJCXEucG9wKCk7CgkJZm9yKGludCBpPTA7aTxnW25leHRdLnNpemUoKTtpKyspCgkJe2lmKHZbZ1tuZXh0XVtpXV09PTApCgkJIHsKCQkgCXZbZ1tuZXh0XVtpXV09MTsKCQkgCWRbZ1tuZXh0XVtpXV09ZFtuZXh0XSsxOwoJCSAJcS5wdXNoKGdbbmV4dF1baV0pOwoJCSB9CgkgICAgfQoJfQoJaW50IGFucz0wOwoJcmVwKGksMSxuKQoJIGNvdXQ8PGRbaV08PCIgIjsKCWNvdXQ8PGVuZGw7IAoJcmVwKGksMSxuKQoJIGFucz1tYXgoYW5zLGRbaV0pOwoJcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKQp7CiBpbihkLG4pOwogZy5yZXNpemUobisyKTsKIHJlcChpLDEsbi0xKQogewogCWludCB4LHk7CiAJaW4oZCx4KSxpbihkLHkpOwogCWdbeF0ucHVzaF9iYWNrKHkpLGdbeV0ucHVzaF9iYWNrKHgpOwogfQogY291dDw8YmZzKDEpOwoKcmV0dXJuIDA7Cn0KCgo=