program dice (input, output); const max=50; var dadi : array[0..max+1,0..max+1] of boolean; picture : array[0..max+1,0..max+1] of char; caso,w,h,nsol : integer; sol : array[1..max]of integer; procedure leggi; var i,j : integer; c : char; begin for i:=0 to w+1 do begin picture[0,i]:='.'; picture[h+1,i]:='.'; end; for i:=0 to h+1 do begin picture[i,0]:='.'; picture[i,w+1]:='.'; end; for i:=1 to h do begin for j:=1 to w do read(picture[j,i]); readln; end; end; { leggi } procedure deb; var i,j : integer; begin for i:=0 to h+1 do begin for j:=0 to w+1 do write(picture[j,i]); writeln; end; writeln; end; { deb } procedure cerca(var posx,posy : integer); var i,j : integer; begin posx:=0;posy:=0; for i:=1 to h do for j :=1 to w do if picture[j,i]='*' then begin posx:=j; posy:=i; end; end; { cerca } procedure eliminaVicini(x,y : integer); begin picture[x,y]:='.'; if picture[x+1,y]='X' then eliminaVicini(x+1,y); if picture[x-1,y]='X' then eliminaVicini(x-1,y); if picture[x,y+1]='X' then eliminaVicini(x,y+1); if picture[x,y-1]='X' then eliminaVicini(x,y-1); end; procedure conta(x,y : integer;var n:integer); begin if picture[x,y]='X' then begin n:=n+1; eliminaVicini(x,y); end; { writeln('--- ',x,y); writeln(picture[x,y]); } picture[x,y]:='.'; { deb; } if (picture[x+1,y]='X') or (picture[x+1,y]='*') then conta(x+1,y,n); if (picture[x-1,y]='X') or (picture[x-1,y]='*') then conta(x-1,y,n); if (picture[x,y+1]='X') or (picture[x,y+1]='*') then conta(x,y+1,n); if (picture[x,y-1]='X') or (picture[x,y-1]='*') then conta(x,y-1,n); end; procedure elabora; var x,y,n : integer; begin cerca(x,y);nsol:=0; while(x<>0) do begin nsol:=nsol+1; n:=0;conta(x,y,n); sol[nsol]:=n; cerca(x,y); end; end; { elabora } procedure ordina_sol; var i,j,t : integer; begin for i:=1 to nsol-1 do for j:=i+1 to nsol do if sol[i]>sol[j] then begin t:=sol[i]; sol[i]:=sol[j]; sol[j]:=t; end; end; procedure scrivi; var i,j : integer; begin writeln('Throw ',caso:1); ordina_sol; for i:=1 to nsol do write(sol[i]:1,' '); writeln; writeln; end; begin reset(input,'dice.in'); caso:=0; read(w,h); while (w<>0) do begin caso:=caso+1; readln; leggi; elabora; scrivi; read(w,h); end; close(input); end.