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

Задача . F. Очередной разворот подстроки


Задача

Темы: битмаски дп *2200

Вам задана строка \(s\), состоящая только из первых \(20\) строчных букв латинского алфавита ('a', 'b', ..., 't').

Напомним, что подстрокой \(s[l; r]\) строки \(s\) называется строка \(s_l s_{l + 1} \dots s_r\). Например, подстроками «codeforces» являются «code», «force», «f», «for», но не строки «coder» и «top».

Вы можете произвести следующую операцию не более одного раза: выбрать какую-то подстроку \(s[l; r]\) и развернуть ее (то есть строка \(s_l s_{l + 1} \dots s_r\) превращается в \(s_r s_{r - 1} \dots s_l\)).

Ваша задача — максимизировать длину максимальной подстроки \(s\), состоящей из различных (то есть уникальных) символов.

Строка состоит из различных символов, если ни один символ этой строки не встречается более одного раза. Например, строки «abcde», «arctg» и «minecraft» состоят из различных символов, а строки «codeforces», «abacaba» не состоят из различных символов.

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

Единственная строка входных данных содержит одну строку \(s\), состоящую из не более, чем \(10^6\) символов 'a', 'b', ..., 't' (первых \(20\) строчных букв латинского алфавита).

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

Выведите одно целое число — максимально возможную длину максимальной подстроки \(s\), состоящей из различных символов, после переворота не более чем одной ее подстроки.


Примеры
Входные данныеВыходные данные
1 abacaba
3
2 abcdecdf
6
3 aabbcc
3
4 abcdeefc
6

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

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