Олимпиадный тренинг

Задача . D. Секретные пароли


Один малоизвестный хакер захотел заполучить пароль администратора от тестирующей системы AtForces, чтобы узнать задачи с предстоящего контеста. Чтобы достичь этого, он пробрался в кабинет администратора и украл листочек, на котором записан список из \(n\) паролей — строк, состоящих из строчных букв латинского алфавита.

Хакер вернулся домой и начал готовиться ко взлому. Он обнаружил, что в системе содержатся только пароли с украденного листочка, и что система определяет эквивалентность паролей \(a\) и \(b\) следующим образом:

  • два пароля \(a\) и \(b\) эквивалентны, если существует символ, который есть и в \(a\), и в \(b\);
  • два пароля \(a\) и \(b\) эквивалентны, если существует другой пароль \(c\) из списка, которому эквивалентны одновременно и \(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\) символов. Все они состоят только из строчных букв латинского алфавита.

Выходные данные

В единственной строке выведите минимальное количество паролей, использование которых позволит гарантированно получить доступ к системе.

Примечание

Во втором примере необходимо использовать любой из паролей, чтобы получить доступ к системе.


Примеры
Входные данныеВыходные данные
1 4
a
b
ab
d
2
2 3
ab
bc
abc
1
3 1
codeforces
1

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя