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

Задача . B. Реверс сорт


У Ashish есть бинарная строка \(s\) длины \(n\), которую он хочет отсортировать в неубывающем порядке.

Он может выполнять следующую операцию:

  1. Выберите подпоследовательность любой длины, элементы которой идут в невозрастающем порядке. Формально, выберите любое \(k\) такое, что \(1 \leq k \leq n\) и любую последовательность \(k\) индексов \(1 \le i_1 \lt i_2 \lt \ldots \lt i_k \le n\) такую, что \(s_{i_1} \ge s_{i_2} \ge \ldots \ge s_{i_k}\).
  2. Затем, «разверните» эту последовательность. Формально, поменяйте местами \(s_{i_1}\) с \(s_{i_k}\), \(s_{i_2}\) с \(s_{i_{k-1}}\), \(\ldots\) и \(s_{i_{\lfloor k/2 \rfloor}}\) с \(s_{i_{\lceil k/2 \rceil + 1}}\) (Здесь \(\lfloor x \rfloor\) обозначает наибольшее целое число, не превосходящее \(x\), а \(\lceil x \rceil\) обозначает наименьшее целое число, не меньшее \(x\)).

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

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

Первая строка содержит одно целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((1 \le n \le 1000)\)  — длину бинарной строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), содержащую только символы \(0\) и \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

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

Для каждого набора входных данных выведите следующее:

  • минимальное количество операций \(m\) в первой строке (\(0 \le m \le n\)).
  • Каждая из следующих \(m\) строк должна иметь вид: \(k\) \(i_1\) \(i_2\) ... \(i_{k}\), где \(k\) — длина, а \(i_1 \lt i_2 \lt ... \lt i_{k}\) — индексы выбранной подпоследовательности. Для них должны выполняться ограничения из условия.
Примечание

В первом наборе входных данных строка уже отсортирована в неубывающем порядке.

Во втором наборе входных данных мы можем выполнить следующую операцию:

  • \(k = 4:\) выбираем индексы \(\{1, 3, 4, 5\}\)

    \(\underline{1}\) \(0\) \(\underline{1}\) \(\underline{0}\) \(\underline{0}\) \(\rightarrow \) \(\underline{0}\) \(0\) \(\underline{0}\) \(\underline{1}\) \(\underline{1}\)

В третьем наборе входных данных мы можем выполнить следующую операцию:

  • \(k = 3:\) выбираем индексы \(\{3, 5, 6\}\)

    \(0\) \(0\) \(\underline{1}\) \(0\) \(\underline{0}\) \(\underline{0}\) \(\rightarrow \) \(0\) \(0\) \(\underline{0}\) \(0\) \(\underline{0}\) \(\underline{1}\)


Примеры
Входные данныеВыходные данные
1 3
7
0011111
5
10100
6
001000
0
1
4 1 3 4 5 
1
3 3 5 6

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

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