#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
typedef long long ll;

using namespace std;

int n;

bool cmp(int x1,int y1,int x2,int y2)
{
	if(min(x1,x2)==min(y1,y2)) return false;
	if(max(x1,x2)==max(y1,y2)) return false;
	return true;
}

void solve()
{
    cin >> n;
	vector<pair<int,int>> x,y;
	for(int i=1;i<=n;i++)
	{
		int tx,ty;
		cin >> tx >> ty;
		x.pb({tx,i}); y.pb({ty,i});
	}
	sort(x.begin(),x.end());
	sort(y.begin(),y.end());
	int dy = y.back().fir-y[0].fir;
	int dy1 = y.back().fir-y[1].fir;
	int dy2 = y[y.size()-2].fir-y[0].fir;
	int dx = x.back().fir-x[0].fir;
	int dx1 = x.back().fir-x[1].fir;
	int dx2 = x[x.size()-2].fir-x[0].fir;
	int ret = 0;
	if(dy>=dx)
	{
		ret = max(dy1,dy2); 
		ret = max(max(dx1,dx2),ret);
		if(cmp(x.back().sec,y.back().sec,x[0].sec,y[0].sec)) ret = max(dx,ret);
		cout << ret << endl;
	}
	else
	{
		ret = max(dx1,dx2); 
		ret = max(max(dy1,dy2),ret);
		if(cmp(x.back().sec,y.back().sec,x[0].sec,y[0].sec)) ret = max(dy,ret);
		cout << ret << endl;
	}
    return;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int tc=1;
	//cin>>tc;
	for(int i=1;i<=tc;i++)
	{
		//cout << "Case #" << i << ": ";  
		solve();
	}
 	return 0;
}
#include <bits/stdc++.h>
#define Rep(i,n,m) for(int i=(int)(n);i<(int)(m);i++)
#define rep(i,n) Rep(i,0,n)
#define all(v) v.begin(),v.end()
using namespace std;
using ll=long long;
using vi=vector<int>;
using vll=vector<ll>;
#define _GLIBCXX_DEBUG
using graph=vector<vi>;
vi d;
queue<int> q;
int bfs(graph &G,int s){
  d[s]=0;q.push(s);
  int last=0;
  while(!q.empty()){
    int t=q.front();q.pop();last=t;
    for(int v:G[t]){
      if(d[v]>=0) continue;
      d[v]=d[t]+1;q.push(v);
    }
  }
  return last;
};
vi ans;
void dfs(graph &G,int s,int &e,vi &dv){
  ans[s]=e;
  int last=-1;
  for(int v:G[s]){
    if(ans[v]>0) continue;
    if(dv[v]==0){
      last=v;
      continue;
    }
    e++;
    dfs(G,v,e,dv);
  }
  if(last>=0){
    e++;
    dfs(G,last,e,dv);
  }
  e++;
  return;
};
int main(){
  int N;cin>>N;
  graph G(N);
  rep(i,N-1){
    int x,y;cin>>x>>y;x--;y--;
    G[x].push_back(y);G[y].push_back(x);
  }
  d=vi(N,-1);
  int v=bfs(G,0);
  d=vi(N,-1);
  int u=bfs(G,v);
  vi dv=d;
  d=vi(N,-1);
  int s=bfs(G,u);
  vi du=d;
  int ds=d[s];
  
  rep(i,N){
    dv[i]+=(du[i]-ds);
  }
  ans=vi(N);
  int e=1;
  dfs(G,v,e,dv);
  rep(i,N){
    cout << ans[i];
    if(i<N-1) cout << ' ';
    else cout << endl;
  }
  return 0;
}