CF1531E3 Сортировка слиянием
题目描述
请看以下用 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 的高级开发人员瓦西里生成了一个由 $n$ 个不同整数组成的排列 $a$(范围是从 $1$ 到 $n$),他把这个排列输入到 `sort` 函数中,得到了一个字符串 $s$。第二天,瓦西里找到了字符串 $s$,然而,他却弄丢了原始排列 $a$。
瓦西里希望能恢复出一个排列 $a$,使得通过 `sort` 函数再次运行后得到相同的字符串 $s$。请你帮帮他!
输入格式
输入中包含一个非空的字符串 $s$,这个字符串由 '0' 和 '1' 组成。
对于任意的测试数据,总存在一个长度不超过 $10^5$ 的排列满足上述条件。不过,你的答案长度可以任意,包括超过 $10^5$。
输出格式
第一行输出一个整数 $n$,表示排列的长度。
第二行输出 $n$ 个不同的整数 $a_0, a_1, \ldots, a_{n-1}$,这些整数是排列的元素,并且满足 $1 \le a_i \le n$。
如果有多个可能的答案,输出其中任何一个即可。
**本翻译由 AI 自动生成**