Problem
No início do século XVIII, um grupo de exploradores europeus chegou a uma ilha habitada por um grupo de tribos que nunca haviam tido contato com representantes da civilização européia.
Para estabelecer contatos com os nativos com sucesso, o líder do grupo planeja presentear o líder de cada tribo que encontrar. Para isso, trouxe uma longa corrente de vidro, semelhante a pedras preciosas.
Vamos representar a string como uma string s, composta por letras minúsculas do alfabeto inglês, onde cada letra significa o tipo de vidro na posição correspondente.
Os pesquisadores vão cortar a corrente em alguns fragmentos e, em seguida, entregar exatamente um fragmento ao líder de cada tribo encontrada pelo grupo. O líder da pesquisa decidiu dividir a cadeia em fragmentos de acordo com as seguintes regras:
- Para não perder muito tempo cortando, cada fragmento deve ser um grupo de pedaços de vidro adjacentes na cadeia, ou seja, uma substring da string s.
- Todos os pedaços de vidro devem ser usados, ou seja, cada pedaço de vidro deve ser incluído em exatamente um fragmento.
- Como os pesquisadores não sabem como os aborígenes irão avaliar certos tipos de vidro, eles querem que cada chefe obtenha o mesmo conjunto de vidro, independentemente da ordem. Ou seja, para qualquer tipo de vidro, o número de vidros desse tipo deve ser o mesmo em cada um dos fragmentos.
- Os pesquisadores não sabem quantas tribos vivem na ilha, então o número de fragmentos preparados deve ser o maior possível.
Ajude o gerente a determinar o número máximo de fragmentos que podem ser obtidos.
Entrada:
A primeira linha contém a string s (1 <= |s| <= 5000000).
Saída:
Imprima um único número - o número máximo possível de fragmentos em que os pesquisadores podem cortar a cadeia que possuem sem violar nenhuma das condições formuladas pelo líder do grupo.
Exemplos:
Entrada |
Saída |
abbbabbab |
3 |
aabb |
1 |
Explicações:
No primeiro exemplo, os pesquisadores podem quebrar a cadeia 'abbabbbab' fragmentos 'abb', 'abb', 'bab', então o líder de cada tribo que encontrar receberá um copo do tipo 'a' e dois pedaços de 'b'.
No segundo exemplo, a string não pode ser dividida em mais de um fragmento da cadeia, respeitadas todas as condições.