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()]++; } } } }