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

Задача . A. Киану Ривз


Задача

Темы: Строки *800

После исполнения роли Нео в легендарной трилогии «Матрица», Киану Ривз начал сомневаться: возможно, мы действительно живем в виртуальной реальности? Чтобы это выяснить, ему нужно решить следующую задачу.

Будем называть строку состоящую только из нулей и единиц хорошей, если она содержит различное число нулей и единиц. К примеру, строки 1, 101, 0000 являются хорошими, а 01, 1001 and 111000 не являются хорошими.

Дана строка \(s\) длины \(n\) состоящая только из нулей и единиц. Мы должны разрезать \(s\) на минимально возможное количество подстрок \(s_1, s_2, \ldots, s_k\) таким образом, чтобы все они были хорошими. Более формально, мы должны найти минимальную по количеству строк последовательность хороших строк \(s_1, s_2, \ldots, s_k\) такую, что их конкатенация (последовательное склеивание) равно \(s\), то есть \(s_1 + s_2 + \dots + s_k = s\).

К примеру, разрезания 110010 на 110 и 010 или на 11 и 0010 удовлетворяют условию, так как 110, 010, 11, 0010 являются хорошими, а на меньшее число разрезать 110010 нельзя, так как 110010 хорошей не является. В то же время, разрезание 110010 на 1100 и 10 не удовлетворяет условию, так как обе строки не являются хорошими. Также, разрезание 110010 на 1, 1, 0010 не удовлетворяет условию, так как не является минимальным, хоть все \(3\) строки и являются хорошими.

Можете ли вы помочь Киану? Можно показать, что решение всегда существует. Если существует несколько оптимальных решений, выведите любое из них.

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

Первая строка содержит одно целое число \(n\) (\(1\le n \le 100\)) — длину строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую только из нулей и единиц.

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

В первой строке выведите одно целое число \(k\) (\(1\le k\)) — искомое минимальное количество частей, на которое нужно разрезать \(s\).

Во второй строке через пробел выведите \(k\) строк \(s_1, s_2, \ldots, s_k\). Длина каждой строки должна быть положительной. Их конкатенация (последовательное склеивание) должна равняться \(s\), и все они должны быть хорошими.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере, строка 1 вообще не была разрезана. Она является хорошей, поэтому условие выполнено.

Во втором примере, 1 and 0 обе являются хорошими. Строка 10 хорошей не является, поэтому ответ действительно минимальный.

В третьем примере, 100 и 011 обе являются хорошими. Строка 100011 хорошей не является, поэтому ответ действительно минимальный.


Примеры
Входные данныеВыходные данные
1 1
1
1
1
2 2
10
2
1 0
3 6
100011
2
100 011

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

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