program red_and_black; const dx:array[1..4]of integer=(0,1,0,-1); dy:array[1..4]of integer=(1,0,-1,0); var s:string; i,j,k,n,f,x,y,nx,ny,w,h,head,tail,sum:integer; gr:array[0..40,0..40]of integer; dui:array[1..1000,1..2]of integer; procedure find(x,y:integer); begin head:=1; tail:=1; dui[head,1]:=x; dui[head,2]:=y; while head<=tail do begin for i:=1 to 4 do begin nx:=dui[head,1]+dx[i]; ny:=dui[head,2]+dy[i]; if (nx>0)and(nx<=h)and(ny>0)and(ny<=w) then begin if gr[nx,ny]<>1 then begin gr[nx,ny]:=1; inc(sum); inc(tail); dui[tail,1]:=nx; dui[tail,2]:=ny; end;{then} end;{then} end;{for-i} inc(head); end;{while} end;{find} begin{main} readln(w,h); while (w<>0)and(h<>0) do begin for i:=1 to h do begin readln(s); for j:=1 to w do begin if s[j]='.' then gr[i,j]:=0; if s[j]='#' then gr[i,j]:=1; if s[j]='@' then begin x:=i; y:=j; gr[i,j]:=1; sum:=1; end;{then} end;{for-j} end;{for-i} find(x,y); writeln(sum); readln(w,h); end;{while} end. /************************************************************** Problem: 2126 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/