1 #include <cstdio>
2 #include <cstdlib>
3 #include <cstring>
4 #include <algorithm>
5 #include <iostream>
6 #include <stack>
7 #include <vector>
8 #include <bitset>
9
10 using namespace std;
11
12 #define print(x) cout<<x<<endl
13 #define input(x) cin>>x
14 #define SIZE 100010
15 #define pb push_back
16
17 inline int lowbit(int x){return x&(-x);}
18 int n,root;
19 vector<int> g[SIZE];
20 int l[SIZE],r[SIZE];
21 //the first visit and the last visit of one node
22 int baum[SIZE<<1];
23 int cnt,ans[SIZE];
24
25 int sum(int x)
26 {
27 int res=0;
28 for(int i=x;i>0;i-=lowbit(i))
29 {
30 res+=baum[i];
31 }
32 return res;
33 }
34
35 void modify(int x,int val)
36 {
37 for(int i=x;i<cnt;i+=lowbit(i))
38 {
39 baum[i]+=val;
40 }
41 }
42
43 void init()
44 {
45 for(int i=0;i<SIZE;i++) g[i].clear();
46 memset(l,0,sizeof(l));
47 memset(r,0,sizeof(r));
48 memset(baum,0,sizeof(baum));
49 memset(ans,0,sizeof(ans));
50 cnt=1;
51 }
52
53 void dfs()
54 {
55 stack<int> st;
56 st.push(root);
57 bitset<SIZE> visit;
58 while(!st.empty())
59 {
60 int now=st.top();
61 if(!visit[now])
62 {
63 l[now]=cnt++;
64 visit[now]=true;
65 }
66 bool pushed=false;
67 for(int i=0;i<(int)g[now].size();i++)
68 {
69 if(!visit[g[now][i]])
70 {
71 st.push(g[now][i]);
72 pushed=true;
73 break;
74 }
75 }
76 if(pushed) continue;
77
78 if(visit[now])
79 {
80 r[now]=cnt++;
81 st.pop();
82 }
83 }
84 }
85
86 void slove()
87 {
88 for(int i=1;i<=n;i++)
89 {
90 ans[i]=sum(r[i])-sum(l[i]-1);
91 modify(l[i],1);
92 }
93 }
94
95 int main()
96 {
97 int a,b;
98 while(input(n>>root) && n+root)
99 {
100 init();
101 for(int i=0;i<n-1;i++)
102 {
103 scanf("%d%d",&a,&b);
104 g[a].pb(b);
105 g[b].pb(a);
106 }
107 dfs();
108 slove();
109 for(int i=1;i<=n;i++)
110 {
111 if(i>1) printf(" ");
112 printf("%d",ans[i]);
113 }
114 puts("");
115 }
116 return 0;
117 }