#include <iostream>
#include <algorithm>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <string.h>
#include <stack>
#include <assert.h>
#include <bitset>
#define Endl endl
#define mp make_pair
#define ll long long 
#define pii pair<int,int>
#define pll pair<ll,ll>
#define over(A) {cout<<A<<endl;exit(0);}
#define all(A) A.begin(),A.end()
#define ceil(a,b) ((a-1)/b+1)
#define srand() mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rand(l,r) uniform_int_distribution<int>(l,r)(rng)
typedef unsigned long long ull;
const int inf=1039074182;
using namespace std;
int n;
vector <int> vec[200005];
int par[200005];
int maxpar[200005];
int a[200005];
map <int,int> G[200005];
int res[200005];

void go(int x,int p)
{
	par[x]=p;
	if(p!=-1) maxpar[x]=max(par[x],maxpar[par[x]]);
	for(auto u:vec[x])
	{
		if(u==p) continue;
		go(u,x);
	}
}

ostream & operator << (ostream &out,set <int> x)
{
	if(x.size()==0)
	{
		out<<"{}";
		return out;
	}
	cout<<"{";
	for(auto u:x)
	{
		if(u!=*x.begin()) cout<<",";
		cout<<u;
	}
	cout<<"}";
	return out;
}

int dfs(int x,int k)
{
	if(G[x].count(k)) return G[x][k];
	int res=1;
	for(auto u:vec[x])
	{
		if(u==par[x]) continue;
		if(u>=k) continue;
		res+=dfs(u,k);
	}
	return G[x][k]=res;
}

//set <int> *dfs(int x,int p,int a[],int G[])
//{
//	int mk=-1;
//	set <int> *k;
//	vector <set<int>*> v;
//	for(auto u:vec[x])
//	{
//		if(u==p) continue;
//		v.push_back(dfs(u,x,a,G));
//	}
////	if(x==6)
////	{
////		cout<<vec[x].size()<<endl;
////	}
//	for(auto it:v)
//	{
//		if((int)it->size()>mk)
//		{
//			mk=(int)it->size();
//			k=it;
//		}
//	}
//	if(mk==-1)
//	{
//		set <int> *p;
//		p=new set <int>;
//		if(x<a[x]) p->insert(x);
//		G[x]=p->size();
//		return p;
//	}
//	for(auto it:v)
//	{
//		if(it==k) continue;
//		for(auto element:*it)
//		{
//			k->insert(element);
//		}
//	}
//	k->insert(x);
//	k->erase(k->lower_bound(a[x]),k->end());
//	G[x]=k->size();
//	return k;
//}

//void calc(int a[],int G[])
//{
//	dfs(0,-1,a,G);
//}

void cf(int x,int p)
{
	if(x)
	{
		if(x>maxpar[par[x]])
		{
			res[x]=res[par[x]]+dfs(x,maxpar[x]);
//			if(x>maxpar[x]) res[x]=res[par[x]]+G0[x]+1;
//			else res[x]=res[par[x]]+G0[x];
//			res[x]=res[par[x]]+G0[x]+(x>maxpar[x]);
		}
		else
		{
			res[x]=res[par[x]]+dfs(x,maxpar[x])-dfs(x,maxpar[par[x]]);
//			res[x]=res[par[x]]+G0[x]-G1[x];
		}
	}
	for(auto u:vec[x])
	{
		if(u==p) continue;
		cf(u,x);
	}
}

int main()
{
//	freopen("input.txt","r",stdin);
	cin>>n;
	int x,y;
	for(int i=0;i<n-1;i++)
	{
		scanf("%d%d",&x,&y);
		x--;
		y--;
		vec[x].push_back(y);
		vec[y].push_back(x);
	}
	go(0,-1);
//	for(int i=0;i<n;i++)
//	{
//		a[i]=maxpar[i];
//	}
//	for(int i=0;i<n;i++)
//	{
//		cout<<a[i]<<' ';
//	}
//	cout<<endl;
//	calc(a,G0);
//	for(int i=0;i<n;i++)
//	{
//		cout<<G0[i]<<' ';
//	}
//	cout<<endl;
//	return 0;
//	a[0]=-1;
//	for(int i=1;i<n;i++)
//	{
//		a[i]=maxpar[par[i]];
//	}
//	calc(a,G1);
//	for(int i=0;i<n;i++)
//	{
//		cout<<G1[i]<<' ';
//	}
//	cout<<endl;
	res[0]=0;
	cf(0,-1);
	for(int i=1;i<n;i++)
	{
		printf("%d ",res[i]);
	}
	puts("");
	return 0;
}

Measured memory_bytes: 56320