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 自动生成**