Tea Break with Milk 003
コンテスト日時
2021/09/19 (Su) 19:00 - 20:40

D - 村の合併

Ceylon
2
s
1024
MB
400

問題文

Cafe 県にはいくつかの村があります。それぞれの村は $10$ 文字以下の文字列で表されます。
村と村を結ぶ道が $N$ 個あり、$i$ ($1 \leq i \leq N$) 番目の道は村 $A_i$ と村 $B_i$ を結んでいます。
また、すべての村には、他の村と繋がる道が $1$ つ以上存在します。

村が多すぎて困った Cafe 県の ecto 知事は、互いに行き来のできる村を合併して町を作ることになりました。
合併したあと、Cafe 県にはいくつの町があるかを求めてください。
また、それぞれの町はいくつの村が合併してできたものであるかを求め、それを昇順で出力してください。

制約

  • $1 \le N \le 10^4$
  • $A_i$ と $B_i$ ($1 \leq i \leq N$) は英数字からなる $10$ 文字以下のそれぞれ異なる文字列である。

入力

入力は以下の形式で標準入力から与えられる。

$N$
$A_1\ B_1$
$\vdots$
$A_N\ B_N$

出力

$1$ 行目には、町がいくつあるか出力せよ。
$2$ 行目には、それぞれの町がいくつの村が合併してできたものであるかを昇順・空白区切りで出力せよ。

入力例 1
5 1 2 2 4 4 1 5 6 7 10
出力例 1
3 2 2 3

Cafe 県には以下の $3$ つの町が存在します。

  1. 5,村 6 が合併した町
  2. 7,村 10 が合併した町
  3. 1,村 2,村 4 が合併した町
入力例 2
2 10000000 1 99999999 89999
出力例 2
2 2 2
入力例 3
2 a b b c
出力例 3
1 3

村の名前には英字が含まれる場合があります。

提出
C++23 (g++ 12.2.0)