Lyra 对图的对称性很有研究,她格外喜欢一类对称性很强的图,记为 Dk,其中 k 是一个非负整数,Dk 是一个有 2k 个节点的图,若把节点编号为 0∼2k−1,则两个节点之间连边当且仅当两个节点的编号的异或是某 2 的次幂。
Lyra 还特别喜欢研究图的乘积,记 G1=(V1,E1),G2=(V2,E2),则 G1×G2 定义为
(V1×V2,{((u1,u2),(v1,v2))∈(G1×G2)2|u1=v1∧(u2,v2)∈E2∨u2=v2∧(u1,v1)∈E1})
即对点做笛卡尔积后,两个新点之间连边当前仅当其中一个点在对应原图中相同,另一个点在原图中有直接连边。
Lyra 曾经有一个 Evan 送给她的无向图 G 可惜她把这个图弄丢了,现在 Lyra 只能通过以前的实验数据来推测 G。
Lyra 有一个图 H,且已知其同构于 G×Dk,并且可以假设不存在任何大于零的整数 k1 和无向图 G1 使得 G1×Dk1 同构与 G。
Lyra 想请你还原出 G 并向她证明这确实是一个可行的 G,为此,你要找出可行的 k 并对 H 进行重标号。
输入格式
第一行两个整数 n,m 表示点数和边树。
接下来 m 行每行两个整数 u,v 表示一条无向边。
输出格式
第一行输出一个整数 k 表示找到的 k。
接下来 n 行,每行一个整数 ti 和一个长度为 k 的 01 串 si。
要求:
每个 [1,n2k] 内的整数都要在 ti 中出现恰好 2k 次。
每个长度为 k 的 01 串要在 si 中出现恰好 n2k 次。
(ti,si) 有序对不存在重复。
存在一个点数 n2k 的图 G=([1,n2k],E),对于任意两个点 u,v:u,v 之间有边当且仅当 (tu,tv)∈E∧su=sv 或 tu=tv∧su⊕sv=2p。(p 为任意非负整数,⊕ 表示异或)。
样例输入输出
样例输入1
4 4 1 2 3 4 1 4 2 3####样例输出1
2 1 00 1 01 1 11 1 10
样例输入2
6 9 1 2 2 3 3 1 4 5 5 6 6 4 1 4 2 5 3 6
样例输出2
1 1 0 2 0 3 0 1 1 2 1 3 1
样例输入3
见 /equipoise/ex_equipoise3.in
样例输出3
见 /equipoise/ex_equipoise3.ans
数据范围及约定
对于全部数据 1≤n,m≤2×105.
令 K 表示答案中可行的 k。
Subtask 1[9pts]:}
n≤20.
Subtask 2[13pts]:}
n≤100.
Subtask 3[10pts]:}
n=2K≤1000.
Subtask 4[25pts]:}
n≤1000.
Subtask 5[10pts]:}
n=2K≤105.
Subtask 6[33pts]:}
n≤105.
时间限制:1s
空间限制:666MB