CF1263D Secret Passwords

题目描述

一名未知的黑客想要获取 AtForces 测试系统管理员的密码,以便提前获得下一场比赛的题目。为此,他潜入了管理员的办公室,偷走了一张写有 $n$ 个密码的纸条——这些密码都是由小写拉丁字母组成的字符串。 黑客回家后开始准备入侵 AtForces。他发现系统中只包含被盗名单上的密码,并且系统判断两个密码 $a$ 和 $b$ 是否等价的规则如下: - 如果存在某个字母同时出现在 $a$ 和 $b$ 中,则密码 $a$ 和 $b$ 等价; - 如果存在名单中的某个密码 $c$,使得 $c$ 分别与 $a$ 和 $b$ 都等价,则 $a$ 和 $b$ 也等价。 如果系统设置了某个密码,而用户使用了与之等价的密码进行登录,则用户可以成功进入系统。 例如,若名单中包含密码 "a"、"b"、"ab"、"d",则 "a"、"b"、"ab" 彼此等价,但 "d" 与名单中的其他密码都不等价。换句话说,如果: - 管理员密码是 "b",则可以用 "a"、"b" 或 "ab" 这三个密码中的任意一个进入系统; - 管理员密码是 "d",则只能用 "d" 进入系统。 系统中只有一个密码是管理员密码。请帮助黑客计算,为了保证能够进入系统,至少需要尝试多少个密码。注意,黑客并不知道系统设置的是哪一个密码。

输入格式

第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示密码数量。接下来的 $n$ 行,每行一个密码 $s_i$,每个密码为非空字符串,长度不超过 $50$。有些密码可能相同。 保证所有密码的总长度不超过 $10^6$。所有密码仅由小写拉丁字母组成。

输出格式

输出一个整数,表示为了保证能够进入系统,至少需要尝试的密码数量。

说明/提示

在第二个样例中,黑客需要尝试所有密码才能进入系统。 由 ChatGPT 4.1 翻译