program triangles(input,output); var n,caso,maxarea:integer; mat:array [1..100,1..100] of boolean; procedure init; begin reset (input,'triangle.in'); end; procedure chiudifile; begin close (input); end; procedure leggi; var i,j,h,inc:integer; c:char; begin inc:=0; for i:=1 to n do begin for h:=1 to inc do begin read (c); mat[i,h]:=false; end; for j:=(1+inc) to (((n*2)- 1)- inc) do begin read (c); if (c='#') then mat[i,j]:=false else mat[i,j]:=true; end; for j:=((n*2)- inc) to ((n*2)-1) do mat [i,j]:=false; readln; inc:=inc+1; end; end; function controlla (riga,isx,idx : integer) : boolean; var i : integer; nero : boolean; begin if ((riga > 0) and (riga <=n) ) then begin i:=isx; nero:=false; while ((i<=idx) and not nero ) do begin if not mat[riga,i] then nero := true else i:= i+1; end; controlla:=not nero; end else begin controlla:=false; end; end; procedure calcola; var ir,ic,z,maxdim : integer; fine,trov : boolean; function area(i : integer) : integer; var n,q : integer; begin q:=0; n:=1; while (n<=i) do begin q:=q+n; n:=n+2; end; area:=q; end; procedure calcric (riga,j,z : integer;up : boolean) ; begin if not fine then if j>=z then fine:=true else begin if (controlla(riga+1,j+1,z-1) and up) then calcric(riga+1,j+1,z-1,up); if (controlla(riga-1,j+1,z-1) and (not up)) then calcric(riga-1,j+1,z-1,up); end; end; begin maxdim:=0; for ir:=1 to n do begin ic:=1; while (ic <= (2*n-1)) do begin if mat[ir,ic] then begin z:=ic; fine:=false; trov:=false; while ((z<=(2*n-1)) and (not trov)) do begin if not mat[ir,z] then trov:=true else z:=z+1; end; z:=z-1; if not (odd (z-ic+1)) then z:=z-1; if ((z-ic) +1 )> maxdim then begin calcric(ir,ic,z,true); calcric(ir,ic,z,false); end; if fine then begin maxdim:=z-ic+1; maxarea:=area(maxdim); end; end; ic:=ic+1; end; end; end; procedure scrivi; begin writeln ('Triangle #',caso:0); write ('The largest triangle area is '); writeln (maxarea:0,'.'); writeln; end; begin init; readln (n); caso:=0; while (n<>0) do begin caso:=caso+1; maxarea:=0; leggi; calcola; scrivi; readln(n); end; chiudifile; end.