CF1531E1 Сортировка слиянием

题目描述

考虑以下 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 的高级开发者瓦西里曾经生成了一个排列 $a$(这是一个包含从 $1$ 到 $n$ 的 $n$ 个不同整数的数组),并将它传入 `sort` 函数,得到一个输出字符串 $s$。不幸的是,第二天他只找到了这个字符串 $s$,而原始排列 $a$ 已经丢失。

瓦西里想要恢复一个排列 $a$,使得调用 `sort` 函数后能产生相同的字符串 $s$。请帮助他实现这一目标!
                            

输入格式

输入是一个包含字符 '0' 和 '1' 的非空字符串 $s$。 在本题中,每个测试用例都有一个长度为 $16$ 的排列能够满足要求。然而,你可以输出任意长度的排列,只要满足条件即可。

输出格式

在第一行输出一个整数 $n$,表示排列的长度。 在第二行输出 $n$ 个互不相同的整数 $a_0, a_1, \ldots, a_{n-1}$,其中 $1 \le a_i \le n$ 表示排列的元素。 如果有多个满足条件的答案,输出任意一个即可。 **本翻译由 AI 自动生成**