program nome (input,output); var numero,w,h : integer; th,numdadi : integer; dadi : array[1..1000] of integer; immagine : array[0..51,0..51] of char; procedure inizializza; var i,j : integer; begin for i:=0 to 51 do for j:=0 to 51 do immagine[i,j]:='.'; end; procedure Leggi; var i,j : integer; begin for i:=1 to h do begin for j:=1 to w do read(immagine[i,j]); readln; end; end; procedure espandi(i,j : integer); begin immagine[i,j]:='*'; if immagine[i-1,j]='X' then espandi(i-1,j); if immagine[i+1,j]='X' then espandi(i+1,j); if immagine[i,j-1]='X' then espandi(i,j-1); if immagine[i,j+1]='X' then espandi(i,j+1); end; procedure conta(i,j : integer ); begin if immagine[i,j]='D' then numero:=numero+1; immagine[i,j]:='.'; if immagine[i-1,j]<>'.' then conta(i-1,j); if immagine[i+1,j]<>'.' then conta(i+1,j); if immagine[i,j-1]<>'.' then conta(i,j-1); if immagine[i,j+1]<>'.' then conta(i,j+1); end; procedure Elabora; var NODICE : boolean; i,j : integer; begin for i:=1 to h do for j:=1 to w do if immagine[i,j]='X' then begin espandi(i,j); immagine[i,j]:='D'; end; numdadi:=0; for i:=1 to h do for j:=1 to w do if immagine[i,j]='D' then begin numero:=0; conta(i,j); numdadi:=numdadi+1; dadi[numdadi]:=numero; end else immagine[i,j]:='.'; end; { Elabora } procedure ordina; var i,j,tmp : integer; begin for i:=1 to numdadi-1 do for j:=i+1 to numdadi do if dadi[i]>dadi[j] then begin tmp:=dadi[i]; dadi[i]:=dadi[j]; dadi[j]:=tmp; end end; procedure Scrivi; var i : integer; begin th:=th+1; writeln('Throw ',th:1); for i:=1 to numdadi do write(dadi[i]:1,' '); writeln;writeln; end; begin reset (input,'dice.in'); read(w,h); th:=0; while ((w<>0) and (h<>0)) do begin readln; inizializza; Leggi; Elabora; Ordina; Scrivi; read(w,h); end; close(input); end.