#ATagc068b. [AGC068B] 01 Graph Construction

[AGC068B] 01 Graph Construction

题目描述

我们称仅由 01 组成的字符串对 (S,T)(S,T) 满足以下所有条件时(且仅当满足时)为字符串对:

  • S,TS,T 中包含的 0 的个数相等。
  • S,TS,T 中包含的 1 的个数相等。

特别地,对于好字符串对 (S,T)(S,T)S,TS,T 的长度相同。

对于好字符串对 (S,T)(S,T),定义无向图 G(S,T)G(S,T) 如下:

  • SS 的长度为 LL。构建一个包含顶点 1,2,,L1,2,\cdots,L 的图 gg
  • SS0 的个数为 nn。记 SS0 的下标为 1a1<a2<<anL1\leq a_1<a_2<\cdots<a_n\leq LTT0 的下标为 1b1<b2<<bnL1\leq b_1<b_2<\cdots<b_n\leq L。对于每个 1in1\leq i\leq n,在 gg 中添加一条连接顶点 aia_ibib_i 的边。
  • SS1 的个数为 mm。记 SS1 的下标为 1c1<c2<<cmL1\leq c_1<c_2<\cdots<c_m\leq LTT1 的下标为 1d1<d2<<dmL1\leq d_1<d_2<\cdots<d_m\leq L。对于每个 1im1\leq i\leq m,在 gg 中添加一条连接顶点 cic_idid_i 的边。
  • 经过上述步骤得到的 gg 即为 G(S,T)G(S,T)

给定一个长度为 NN 的整数序列 A=(A1,A2,,AN)A=(A_1,A_2,\cdots,A_N)。请找到一个满足以下所有条件的好字符串对 (S,T)(S,T)

  • SS 的长度为 LL,满足 NL105N\leq L\leq 10^5
  • 对于任意 1i,jN1\leq i,j\leq N,当且仅当 G(S,T)G(S,T) 中顶点 ii 和顶点 jj 属于同一连通分量时,有 Ai=AjA_i=A_j

可以证明,在本题的限制下,解一定存在。

输入格式

输入通过标准输入给出,格式如下:

NN A1A_1 A2A_2 \cdots ANA_N

输出格式

请输出如下格式的答案:

LL SS TT

其中,LLS,TS,T 的长度。若有多个解,输出任意一个均可。

样例 1

输入

3
1 2 1

输出

4
0011
1100

样例 2

输入

5
1 2 3 4 5

输出

5
01010
01010

样例 3

输入

6
1 1 1 1 1 1

输出

6
011111
111110

样例 4

输入

10
1 2 3 2 4 3 4 4 5 6

输出

21
000101010111100011011
011010000010101111110

说明/提示

限制条件

  • 1N1001\leq N\leq 100
  • 1AiN1\leq A_i\leq N
  • 输入的所有值均为整数

样例解释 1

对于输出样例中的 S,TS,T,构造 G(S,T)G(S,T) 如下:

  • 准备一个包含 44 个顶点的图 gg
  • SS0 的下标为 (1,2)(1,2)TT0 的下标为 (3,4)(3,4)。在 gg 中添加边 (1,3),(2,4)(1,3),(2,4)
  • SS1 的下标为 (3,4)(3,4)TT1 的下标为 (1,2)(1,2)。在 gg 中添加边 (3,1),(4,2)(3,1),(4,2)
  • G(S,T)=gG(S,T)=g

G(S,T)G(S,T) 的连通分量为顶点 (1,3)(1,3) 和顶点 (2,4)(2,4)。这满足所有条件,因此该 (S,T)(S,T) 是正确的输出。

由 ChatGPT 4.1 翻译