CF1531E2 Сортировка слиянием
题目描述
请看下面这段用 Python 编写的归并排序代码:
```
```
def sort(a):
n = len(a)
b = [0 for i in range(n)]
log = []
def mergeSort(l, r):
if r - l > 1
mergeSort(l, m)
mergeSort(m, r)
i, j, k = l, m, l
while i < m and j < r:
if a[i] < a[j]:
log.append('0')
b[k] = a[i]
i += 1
else:
log.append('1')
b[k] = a[j]
j += 1
k += 1
while i < m:
b[k] = a[i]
i += 1
k += 1
while j < r:
b[k] = a[j]
j += 1
k += 1
for p in range(l, r):
a[p] = b[p]
mergeSort(0, n)
return "".join(log)
```
```
如你所见,这段代码使用了日志来记录操作步骤,这是开发中的一个重要工具。
VK 的一位高级开发者 Vasya 创建了一个排列 $a$,该排列包含 $n$ 个不同的整数,范围从 $1$ 到 $n$。他将这个排列输入到 `sort` 函数中,输出得到一个字符串 $s$。第二天,Vasya 只找到了字符串 $s$,而排列 $a$ 却不见了。
Vasya 需要找回一个排列 $a$,使得通过 `sort` 函数处理后能得到相同的字符串 $s$。请帮他完成这个任务!
输入格式
输入为一个非空的字符串 $s$,仅由字符 `0` 和 `1` 组成。
针对每个测试用例,保证至少存在一个长度不大于 $10^3$ 的排列满足条件。但是,你的答案可以是任何长度的排列,包括超过 $10^3$ 的长度。
输出格式
第一行输出一个整数 $n$,表示排列的长度。
第二行输出 $n$ 个互不相同的整数 $a_0, a_1, \ldots, a_{n-1}$(其中 $1 \le a_i \le n$),表示排列的元素。
如果有多种满足条件的排列,输出其中任意一种即可。
**本翻译由 AI 自动生成**