P14906 [NHSPC 2024] 數字叢集

Description

小明暑假期間在某實驗室實習,主要工作就是協助實驗室整理大量的實驗數據。 實驗室累積了許多數據資料,但因設備及管理等問題,小明發現有些數據可能登記錯誤; 這些記錯的數字**恰好為原數字的兩個位數被互換**, 例如數字 $1234$ 被記錄成 $1324$ 或者數字 $300$ 被記成 $3$ 等等。 小明希望你寫出一個程式檢查哪些資料有可能被登記錯誤,具體來說他定義了一個關係函式 $P(a, b)$, 若 $a$ 將某兩個位數互換後與 $b$ 相等,則 $P(a, b) = \text{True}$;否則 $P(a, b) = \text{False}$。 舉例來說 $P(300, 3) = \text{True}$, 因為 $300$ 的第一位數和第三位數互換時會變成 $3$; 但 $P(1234, 2143) = \text{False}$,因為交換任何兩個位數都無法變成相同的數字。 小明想要將 $n$ 個相異的非負整數 $a_1, a_2, \cdots a_n$ 運用關係函式 $P$ 來加以分群。 開始時,每一個數字可以自成一群, 對於一個數字 $x$ 和一個群 $S$, 如果 $S$ 有一個成員 $y$ 使得 $P(x, y) = \text{True}$, 則將 $x$ 所在的群與 $S$ 合併,形成更大的群。 小明想知道這些數據可以分成幾群,群的個數越小越好,和最大的群有多少數字。請寫一個程式幫助小明完成此任務。

Input Format

$$\begin{aligned} &n \\ &a_1 \ a_2 \ \ldots \ a_n \end{aligned}$$ * $n$ 代表數字的個數。 * $a_i$ 代表第 $i$ 個想分群的整數。

Output Format

$$G_n \quad G_m$$ * $G_n$ 代表分群後群的個數。 * $G_m$ 代表分群後最大的群有幾個數字。

Explanation/Hint

### 測資限制 * $2 \le n \le 100$。 * $a_i$ 的位數小於等於 $5000$,$n$ 個數字皆相異且數字的前面不會有不必要的 $0$ (leading zero)。 * 輸入的數皆為非負整數。 ### 評分說明 本題共有三組子任務,條件限制如下所示。 每一組可有一或多筆測試資料,該組所有測試資料皆需答對才會獲得該組分數。 | 子任務 | 分數 | 額外輸入限制 | | :----: | :----------------: | --------------- | | 1 | 15 | $n \le 20$ 且 $a_i$ 的位數等於 $5$。 | | 2 | 28 | $a_i$ 的位數小於等於 $500$。 | | 3 | 57 | 無額外限制。 |