AT_toyota2023spring_final_g Git Gud

Description

[problemUrl]: https://atcoder.jp/contests/toyota2023spring-final/tasks/toyota2023spring_final_g プログラミング初心者のすぬけくんが,以下のようなコードを書きました. ``` N = read_integer() parent = array(N, -1) //長さ N の配列 parent を作り,すべての要素を -1 で初期化 find(v): if parent[v] == -1: return v else: return find(parent[v]) union(a,b): parent[find(b)] = find(a) for i = 0 to N-2: A_i = read_integer() B_i = read_integer() union(A_i,B_i) ``` これは,$ N $ 頂点の木の情報を受けとり,Union-Find で辺を結ぶだけのプログラムです. プログラミングマスターのりんごさんは,このプログラムの欠陥に気が付きました. すなわち,Union-Find に一切の高速化が施されていないのです. 今,りんごさんは $ N $ 頂点からなる木 $ T $ を持っています. $ T $ の頂点には $ 0 $ から $ N-1 $ までの番号が,辺には $ 0 $ から $ N-2 $ までの番号がついています. 辺 $ i $ は頂点 $ A_i $ と頂点 $ B_i $ を結ぶ辺です. りんごさんは,すぬけくんのプログラムに $ T $ を入力として与えようとしています. ただしその前に,$ T $ の辺の番号と,辺の端点の順番を自由に入れ替えることができます. りんごさんは,すぬけくんのプログラムが非効率的であることを示すために,`find` 関数が呼ばれる回数を最大化したいです. `find` 関数が呼ばれる回数の最大値を求めてください.

Input Format

入力は以下の形式で標準入力から与えられる. > $ N $ $ A_0 $ $ B_0 $ $ A_1 $ $ B_1 $ $ \vdots $ $ A_{N-2} $ $ B_{N-2} $

Output Format

答えを出力せよ.

Explanation/Hint

### 制約 - $ 2\ \leq\ N\ \leq\ 2000 $ - $ 0\ \leq\ A_i,B_i\ \leq\ N-1 $ - $ A_i\ \neq\ B_i $ - 入力されるグラフは木である ### Sample Explanation 1 `find` 関数は必ず $ 2 $ 回呼ばれます. ### Sample Explanation 2 辺 $ 0 $ の端点の順番を入れ替え,以下のような入力を作ると,`find` 関数が $ 5 $ 回呼ばれます. ``` 3 1 0 0 2 ``` ### Sample Explanation 3 辺の順番と辺の端点の順番を適切に入れ替え,以下のような入力を作ると,`find` 関数が $ 13 $ 回呼ばれます. ``` 5 3 0 4 3 1 0 0 2 ```