type sark=record
x,y:integer;
end;
mat=array[0..1000,0..1000]of integer;
sor=array[0..1000] of sark;
var a:mat;
d:sor;
c:char;
n,m,i,j,bei,bej,kii,kij,k:integer;
f,g:text;
procedure jbfl(x,y:integer);
var i,j:integer;
begin
if (x>0)and(y>0) then begin
if(a[x,y-1]>=0)and(a[x,y-1]>a[x,y]+1) then begin jbfl(x,y-1); a[x,y-1]:=a[x,y]+1; end;
if(a[x,y+1]>=0)and(a[x,y+1]>a[x,y]+1) then begin jbfl(x,y+1); a[x,y+1]:=a[x,y]+1; end;
if(a[x-1,y]>=0)and(a[x-1,y]>a[x,y]+1) then begin jbfl(x-1,y); a[x-1,y]:=a[x,y]+1; end;
if(a[x+1,y]>=0)and(a[x+1,y]>a[x,y]+1) then begin jbfl(x+1,y); a[x+1,y]:=a[x,y]+1; end;
end;
end;
begin
assign(f,'barbar.in'); reset(f);
read(f,n,m);
for i:=1 to n do
for j:=1 to m do a[i,j]:=maxint;
k:=0;
for i:=1 to n do begin readln(f);
for j:=1 to m do begin
read(f,c);
if c='*' then a[i,j]:=-9
else
if c='D' then begin a[i,j]:=-2;
inc(k);
d[k].x:=i;
d[k].y:=j;
end
else
if c='O' then begin
kii:=i;
kij:=j;
a[i,j]:=-1
end
else if c='I' then begin
a[i,j]:=0;
bei:=i;
bej:=j;
end;
end;
end;
close(f);
for i:=1 to n do begin writeln;
for j:=1 to m do write(a[i,j]:7);
end;
writeln;
writeln('elvegzi es : ');
jbfl(bei,bej);
for i:=1 to n do begin writeln;
for j:=1 to m do write(a[i,j]:3);
end;
assign(g,'Barbar.out'); rewrite (g);
close(g);
end.