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

Задача . F. Палиндромы и изменения


Вам дана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Вам разрешено заменить не более одного символа строки на произвольную строчную латинскую букву.

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

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различаются, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — количество символов в строке.

Во второй строке задана сама строка \(s\) из \(n\) строчных латинских букв

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

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

Во второй строке выведите строку, которую можно получить из \(s\) и которая содержит максимальное количество подстрок-палиндромов. Если таких строк несколько, выведите лексикографически минимальную.


Примеры
Входные данныеВыходные данные
1 5
aabaa
15
aaaaa
2 5
aaaaa
15
aaaaa
3 4
awoo
7
aooo

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

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