

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 }