program voda;

const
   dx : array[1 .. 4] of integer = (1, 0, 0, -1);
   dy : array[1 .. 4] of integer = (0, -1, 1, 0);
   inf = 10007;

var
   r, s, i, j, rj : integer;
   krajolik : array[1 .. 10,1 .. 10] of char;

function provjeri (s1 : string; k : integer) : boolean;
var
   i, j, d : integer;
   tabl : array[1 .. 10,1 .. 10] of char;
begin
   for i := 1 to r do
      for j := 1 to s do
         tabl[i,j] := '.';
   case k of
      1 : s1 := Concat(s1, 'R');
      2 : s1 := Concat(s1, 'U');
      3 : s1 := Concat(s1, 'D');
      4 : s1 := Concat(s1, 'L');
   end;
   i := 1; j := 1; tabl[1,1] := '*';
   for d := 1 to Length(s1) do begin
      case s1[d] of
         'L' : Dec (i);
         'R' : Inc (i);
         'U' : Dec (j);
         'D' : Inc (j);
      end;
      if (tabl[i,j]='*') or (i<1) or (j<1) or (i>r) or (j>s) then begin
         provjeri := false; exit;
      end;
      tabl[i,j] := '*';
   end;
   provjeri := true;
end;

procedure Nadji (x, y : integer; s1 : string);
var
   i : integer;
begin
   if (x<1) or (x>r) then exit;
   if (y<1) or (y>s) then exit;
   if krajolik[x,y]='#' then exit;
   if (x=r) and (y=s) then begin rj := (rj+1) mod inf; exit; end;
   if not provjeri(s1, 1) then begin
      s1 := Concat(s1, 'R');
      Nadji (x+dx[1], y+dy[1], s1);
      Delete (s1, Length(s1), 1);
   end;
   if not provjeri(s1, 2) then begin
      s1 := Concat(s1, 'U');
      Nadji (x+dx[2], y+dy[2], s1);
      Delete (s1, Length(s1), 1);
   end;
   if not provjeri(s1, 3) then begin
      s1 := Concat(s1, 'D');
      Nadji (x+dx[3], y+dy[3], s1);
      Delete (s1, Length(s1), 1);
   end;
   if not provjeri(s1, 4) then begin
      s1 := Concat(s1, 'L');
      Nadji (x+dx[4], y+dy[4], s1);
   end;
end;

begin
   readln (r, s);
   for i := 1 to r do begin
      for j := 1 to s do read (krajolik[i,j]);
      readln;
   end;
   Nadji (1, 1, '');
   writeln (rj);
end.
