首先考虑原题咋做。考虑判断答案。

  • 当且仅当 aa 序列全为 00 时答案为 00
  • 序列 aa 没有 00 时答案为 22 的个数对 22 取模的余数 +1+1
  • 否则,当且仅当在序列 aa 为“一段 112,0,22, 0, 2,一段 11”(左右两边的一段 11 都可以为空)的形式时,答案为 22,其余情况为 11

证明

前两个情况是显然的。先证明第三种情况的对应形式无法合成 11,可以发现如果 00 不参与操作只是相当于减少了一个 11,还是该形式;而 00 若参与操作,序列 aa 就会变为第二种情况,并且只有奇数个 22,显然答案为 22。所以该情况一定只能合成 22

再证明非对应形式一定可以合成。考虑归纳,如果我们能找到一个 00,然后将其左右两边合成,只要左右两边不都是 22,最终就可以合出 11

假设 00 的个数大于两个,那么选择最左边的 00 即可,右边至少有两个 00,一定可以得到 11

假设 00 的个数恰好有两个,那么序列 aa 一定是 A0B0CA0B0C 的形式,其中 A,BA, B 都是不存在 00 的序列。如果 BB[2][2],那么先将 BB 和旁边一个 00 合成即可得到 A01CA01C 的形式,该形式答案一定为 11;否则左右两个 00 肯定有一个合法。

假设 00 的个数只有一个。如果 00 两边至少有一个不是 22,那么我们就有操作空间了:当 22 有奇数个时,我们让最靠近 0022 把经过的 11 都干掉,与 00 合并。否则我们直接让 00 与它旁边的那个 11 合并。假设这个 00 的左右两边都不合法,那么一定有一边至少有三个 22,我们把最靠近 00 的两个 22 合并,00 两边就至少有一个 11;否则可以直接合出 11

这样所有情况都被考虑到了,证毕。


那么对于最小字典序,我们贪心从前往后枚举合并位置即可,如果一个位置合并时不影响答案就合并。

显然答案为 0022 时合并序列均为全 11,那么我们只需要考虑答案为 11 的情况。

那么我们肯定是一直合并第一个位置,直到某个临界位置时再合并第一个位置会导致答案变大。考虑这种临界情况会有若干种(其中第一个位置可能是一个前缀一直合并第一个位置得出的):

  1. 01111120211110111\dots1120211\dots11
  2. 02111120211110211\dots1120211\dots11
  3. 10111120211111011\dots1120211\dots11
  4. 20111120211112011\dots1120211\dots11
  5. 22111120211112211\dots1120211\dots11
  6. 21021111210211\dots11
  7. 01s01s,其中 ss 里只包含 1,21, 2,且 22 的个数为奇数。
  8. 10s10s,其中 ss 里只包含 1,21, 2,且 22 的个数为奇数。
  9. 20s20s,其中 ss 里只包含 1,21, 2,且 22 的个数为奇数,且 s21111s \ne 211\dots11
  10. 02s02s,其中 ss 里只包含 1,21, 2,且 22 的个数为奇数。

对于每一种分类讨论出它对应的序列并统计即可。计数是简单的,你可能需要预处理出 fi,jf_{i, j} 表示长度为 ii,一直合并首位得到 jj 的序列数,可能还需要处理 22 的幂次。时间复杂度为 O(n)\mathcal O(\sum n)