/*#include<stdio.h>
int front=0, back=0;
int arr[1001][1001]={};
typedef struct
{
int i;
int j;
}a;
a queue[10000000]={};
void push(int data, int data2)
{
back++;
queue[back].i=data;
queue[back].j=data2;
}
void bfs(int i, int j)
{
if(arr[i][j+1]==0){
push(i, j+1);
arr[i][j+1]=1;
}
if (arr[i][j-1]==0){
push(i, j-1);
arr[i][j-1]=1;
}
if (arr[i+1][j]==0){
push(i+1, j);
arr[i+1][j]=1;
}
if (arr[i-1][j]==0){
push(i-1, j);
arr[i-1][j]=1;
}
}
int main()
{
int n, m, i, j, k=0, t;
scanf ("%d %d", &m, &n);
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
scanf("%d", &arr[i][j]);
if(arr[i][j]==1){
push(i, j);
}
}
}
for(i=0; i<=n+1; i++){
for(j=0; j<=m+1; j++){
if (i==0||j==0){
arr[i][j]=-1;
}
else if(i==n+1||j==m+1){
arr[i][j]=-1;
}
}
}
t=back;
while(front!=back){
front++;
bfs(queue[front].i, queue[front].j);
if(front==t){
k++;
t=back;
}
}
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
if(arr[i][j]==0){
printf("-1");
return 0;
}
}
}
printf("%d", k-1);
}*/
#include<stdio.h>
int arr[101][101]={};
int xl, yl, xr, yr, a=0, n, m;
void map()
{
int i, j;
for(i=xr+1; i<=xl; i++){
for(j=yl+1; j<=yr; j++){
arr[i][j]=0;
}
}
}
void dfs(int i, int j)
{
arr[i][j]=0;
if(arr[i][j+1]==1){//오
a++;
dfs(i,j+1);
}
if(arr[i][j-1]==1){//왼
a++;
dfs(i, j-1);
}
if(arr[i+1][j]==1){
a++;
dfs(i+1, j);
}
if(arr[i-1][j]==1){
a++;
dfs(i-1, j);
}
}
int main()
{
int k, i, j, b=0, temp;
int result[101]={};
scanf("%d %d %d", &n, &m, &k);
//전부 1로 설정
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
arr[i][j]=1;
}
}
//사각형 표시
for(i=0; i<k; i++){
scanf("%d %d %d %d", &xl, &yl, &xr, &yr);
map();
}
/*for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
printf("%d", arr[i][j]);
}
printf("\n");
}*/
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
if(arr[i][j]==1){
a++;
b++;
dfs(i,j);
}
}
result[b]=a;
}
for(i=0; i<k; i++)
{
int min=i;
for(j=i+1; j<b; j++)
{
if(result[j]<result[min])
{
min=j;
}
}
temp=result[i];
result[i]=result[min];
result[min]=temp;
}
printf("%d\n", k);
for(i=0; i<k; i++){
printf("%d ", result[i]);
}
return 0;
}
/*//확인용
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
printf("%d", arr[i][j]);
}
printf("\n");
}*/
#include<stdio.h>
int arr[101][101]={};
int xl, yl, xr, yr, a=0, n, m;
void map()
{
int i, j;
for(i=xl+1; i<=xr; i++){
for(j=yl+1; j<=yr; j++){
arr[i][j]=0;
}
}
}
void dfs(int i, int j)
{
arr[i][j]=0;
if(arr[i][j+1]==1){//오
a++;
dfs(i,j+1);
}
if(arr[i][j-1]==1){//왼
a++;
dfs(i, j-1);
}
if(arr[i-1][j]==1){
a++;
dfs(i-1, j);
}
if(arr[i+1][j]==1){
a++;
dfs(i+1, j);
}
}
int main()
{
int k, i, j, b=0, temp;
int result[101]={};
scanf("%d %d %d", &n, &m, &k);
//전부 1로 설정
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
arr[i][j]=1;
}
}
//사각형 표시
for(i=0; i<k; i++){
scanf("%d %d %d %d", &xl, &yl, &xr, &yr);
map();
}
/*for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
printf("%d", arr[i][j]);
}
printf("\n");
}*/
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
if(arr[i][j]==1){
a++;
b++;
dfs(i,j);
result[b]=a;
}
}
}
for(i=0; i<k; i++)
{
int min=i;
for(j=i+1; j<b; j++)
{
if(result[j]<result[min])
{
min=j;
}
}
temp=result[i];
result[i]=result[min];
result[min]=temp;
}
printf("%d\n", k);
for(i=0; i<k; i++){
printf("%d ", result[i]);
}
return 0;
}
/*//확인
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
printf("%d", arr[i][j]);
}
printf("\n");
}*/