细胞分裂
题号:NC214712
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有一个装满细胞的板子,它被分割成n*m个刚好能装下一个细胞的小格子,细胞会向前后左右中的一个方向分裂出一个新的细胞,分裂出的细胞与原来的细胞完全一样,我们称为同种细胞,最初该板子里存在的细胞是细胞的母体,并且,母体各不相同。分裂结束后,我们对细胞进行了编号,并知道一些细胞之间的分裂关系,我们需要知道母体数,以及现有各种细胞的数目。

细胞编号方式,逐行从左到右编号。

如:5*4的格子:

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

17 18 19 20

输入描述:

第一行,两个整数n,m,用空格隔开,用以表示格子的行数、列数。(1<n,m<1000)

接下来一行,一个整数t,表示分裂次数。(0<t<100000)。

接下来t行,每行两个整数u,v,表示细胞u与细胞v之间存在分裂关系。(1<u,v<n)

输出描述:

第一行一个整数,表示细胞的种数。

第二行,从小到大输出各种细胞的数量,中间用空格隔开。

示例1

输入

复制
5 4
16
2 3
1 5
5 9
4 8
7 8
9 10
10 11
11 12
10 14
12 16
14 18
17 18
15 19
19 20
9 13
13 17

输出

复制
5
1 2 3 3 11

说明

备注:

个别母体细胞由于各种原因不一定会分裂。