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 翻译