#P5250. 「2019-03-03提高模拟赛」染色(coloration)

「2019-03-03提高模拟赛」染色(coloration)

Description

XRJ 得到了一张无向图,这张图上有nn个点mm条边,保证图的点集可以分成两个部分,使得每个部分的点之间均没有任何边相连。点的编号从11nn, XRJ 希望找到一个最大的正整数kk,使得存在一种用2k2^k种颜色将每条边染色的方案满足与任何一个点相邻的边中包含了所有颜色且每种颜色的边的数量相等,并告诉他一组方案。

注意,这意味着如果一个点不与任何边相邻,那么将不存在方案。

Input Format

输入文件名为coloration.in

每个测试点中包含多组数据,对于每组数据:

输入文件第一行两个正整数m,nm,n,用一个空格隔开,表示图的边数和点数。

接下来mm行,每行两个正整数x,yx,y,表示一条从点xx到点yy的无向边,保证xxyy均为合法编号且xyx≠y

数据以一行0 0结束(不包含引号)。

Output Format

输出文件名为coloration.out

对于每组数据:

如果不存在这样的正整数k则输出一行-1,否则第一行输出一个数,表示最大的kk,第二行输出mm个用空格隔开的数,第ii个数表示第ii条边的颜色颜色用112k2k的数字表示。若有多种方案,输出任意一种方案即可。

Sample

样例输入 1

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

样例输出 1

1
1 2 2 1 1 2 1 2

样例解释 1

以上给出了最大的kk和一种合法的输出,若你的输出和上面的输出不符,可以手工检查方案的正确性。

Hint

对于10%10\%的数据:m7m\le 7
对于30%30\%的数据:m100m\le 100
对于50%50\%的数据:m1 000m\le 1\ 000
另有20%20\%的数据:k=1k=1
对于100%100\%的数据:m,n100 000m,n\le 100\ 000,保证图的点集可以分成两个部分,使得每个部分的点之间均没有任何边相连。