#include<stdio.h>
int m,n,cnt=0,color[101][101]= { },area[10001]= { };
void dfs(int x, int y)
{
if(x<1||x>n||y<1||y>m)
{
return;
}
area[cnt]++;
color[x][y]=1;
if(color[x-1][y]==0)
{
dfs(x-1,y);
}
if(color[x+1][y]==0)
{
dfs(x+1,y);
}
if(color[x][y+1]==0)
{
dfs(x,y+1);
}
if(color[x][y-1]==0)
{
dfs(x,y-1);
}
}
int main()
{
int k,i,j,l,x[101][3],y[101][3],temp;
scanf("%d %d %d",&m,&n,&k);
for(i=1; i<=k; i++)
{
scanf("%d %d %d %d",&x[i][1],&y[i][1],&x[i][2],&y[i][2]);
x[i][1]=x[i][1]+1;
y[i][1]=y[i][1]+1;
for(j=x[i][1]; j<=x[i][2]; j++)
{
for(l=y[i][1]; l<=y[i][2]; l++)
{
color[j][l]=1;
}
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(color[i][j]==0)
{
cnt++;
dfs(i,j);
}
}
}
printf("%d\n",cnt);
for(i=1; i<cnt; i++)
{
for(j=1; j<=cnt-i; j++)
{
if (area[j] > area[j+1])
{
temp = area[j];
area[j] = area[j+1];
area[j+1] = temp;
}
}
}
for(i=1; i<=cnt; i++)
{
printf("%d ",area[i]);
}
}