luogu#P5260. [JSOI2013] 超立方体

[JSOI2013] 超立方体

题目背景

超立方体是立方体在高维空间内的拓展(其在 2 维情况下退化为正方形,1 维情况下退化成线段)。在理论计算机科学领域里,超立方体往往可以和 2 进制编码联系到一起。对理论计算机科学颇有研究的 Will 自然也会对超立方体有着 自己的思考。

qwq

上图就是在 0~4 维空间内超立方体所对应的图形。显然我们可以把超立方体的每个顶点看成一个点,每一条棱看成一条边,这样就会得到一个无向图,我们称之为超立方图。

题目描述

D 维空间内的超立方图有 2D2^D 个点,我们把这些点从 002D12^D-1 依次编号。

有一个有趣而重要的充要结论是:一定存在一种编号的方式,使得图中任意两个有边相连的顶点的编号的 2 进制码中,恰好有一位不同。

在2维和3维空间内这个结论可以这样形象的理解:对于 2 维空间,我们只要把这个正方形放到第一象限内,使得 4 个顶点的坐标按逆时针顺序依次为 (0,0),(1,0),(1,1),(0,1)(0,0),(1,0),(1,1),(0,1),然后再把坐标看成 2 位 2 进制数,依次将这 4 个点编号为 0,1,3,2即可。

对于 3 维空间,同样我们可以将立方体的一个顶点与原点重合,并使得所有棱均平行于坐标轴,然后分别确定这 8 个点的坐标,最后把 3 维空间内的坐标看成一个 3 位 2 进制数即可。对于 D 维空间,以此类推。

现在对于一个 NN 个点 MM 条边的无向图(每个点从 00N1N-1 编号),Will 希望知道这个图是否同构于一个超立方图。

输入格式

第一行包含一个整数 QQ 表示此数据中一共包含 QQ 个询问。

接下来 QQ 组询问,每一组询问的输入格式如下:

第一行包含两个整数 NNMM,接下来 MM 行,每行 2 个不同的整数 x,yx,y,表示图中存在一条无向边连接编 号为 xxyy 的点(0x,y<N0 \le x,y < N

输出格式

1、如果询问中给定的图不同构于任何一个超立方图,输出 1-1

2、如果同构于某一个超立方图,那么请给图中这 NN 个点重新编号,并在这一行输出 NN 个用空格隔开的整数,表示原图中每个点新的编号,使得重新编号后,满足题目中所述的结论。

注意:输出文件的每一行,要么仅包含一个整数 1-1,要么则应包含一个由 00N1N-1NN 个数组成的排列。如果有多组解输出任意一个均可。

3
2 2
0 1
1 0
4 4
0 1
1 2
2 0
0 3
8 12
2 3
2 6
7 6
1 7
4 1
3 4
0 2
7 3
5 6
5 1
5 0
4 0
-1
-1
0 6 1 5 4 2 3 7

提示

Q  3, N  32768, M  1000000Q~\leq~3,~N~\leq~32768,~M~\leq~1000000