Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:1 s 空间限制:64 MB

#3478. 「POI2007」办公楼 Offices

统计

题目描述

译自 POI 2007 Stage 1.「Offices

一个公司有 $n$ 个雇员,有 $m$ 对雇员互相留有电话。将雇员分进尽可能多的办公楼里,使得不同办公楼之间的雇员都留有电话,求最大的办公楼个数和对应方案。

输入格式

第一行两个整数 $n$ 和 $m$ ($2 \le n \le 100\ 000,1 \le m \le 2\ 000\ 000$),分别表示雇员的个数和互相留有电话的雇员的个数。雇员从 $1$ 到 $n$ 编号。

接下来 $m$ 行每行两个整数 $a_i$ 和 $b_i$ ($1 \le a_i \lt b_i \le n$)表示雇员 $a_i$ 和 $b_i$ 互相留有电话。输入数据中每对雇员最多出现一次。

输出格式

第一行输出一个整数,表示办公楼的最大个数。

接下来一行输出一个不降序列,表示各办公楼雇员的个数。

如果有多种可能的答案,输出任意一种。

样例

input

7 16
1 3
1 4
1 5
2 3
3 4
4 5
4 7
4 6
5 6
6 7
2 4
2 7
2 5
3 5
3 7
1 7

output

3
1 2 4

一种方案是令 $4$ 号雇员在第一个办公楼,$5,7$ 号雇员在第二个办公楼,$1,2,3,6$ 号雇员在第三个办公楼。