public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int a;
        int b;
        Map<Integer,Integer>  map1= new HashMap<>();//度
        Map<Integer, Integer> map2 = new HashMap<>();//边
        for(int i=1;i<=n;i++) {
            map1.put(i, 0);
        }
        for (int i = 0; i < n-1; i++) {
            a = sc.nextInt();
            int c1=map1.get(a);
            map1.put(a, ++c1);
            b=sc.nextInt();
            map2.put(b, a);
        }
        System.out.println(map1);
        int[] count = new int[n+1];

        while (!map1.isEmpty()) {
            Set<Map.Entry<Integer, Integer>> set = map1.entrySet();
            List<Map.Entry<Integer, Integer>> list = new ArrayList<>(set);
            con(list, count, map2, map1);
        }
       for(int i=1;i<count.length;i++) {
           if (i == count.length) {
               System.out.print(count[i]);
           }
           else{
               System.out.print(count[i]+" ");
           }

       }

    }

    public static void con(List<Map.Entry<Integer, Integer>> list,int [] count,Map<Integer,Integer> map2,Map<Integer,Integer> map1) {
        for (Map.Entry entry : list) {
            if((Integer)entry.getValue()==0){
                   count[(Integer)entry.getKey()]++;
                    map1.remove(entry.getKey());
                    if(map2.containsKey(entry.getKey())){
                        Integer edge=map2.get(entry.getKey());
                        int a = map1.get(edge);
                        if(a>0)
                        map1.put(edge, --a);
                    }
               } else if ((Integer) entry.getValue() > 0) {
                     count[(Integer)entry.getKey()]++;
            }
        }
    }
}