var
    a:array[1..8,1..8]of char;
    c:array[1..8]of boolean;
    i,j,n,m,k,ans,l:longint;

procedure go(t:longint);
var
    i:longint;
begin
    if t>n then exit;
    for i:=1 to n do
        if c[i] and (a[t,i]='#') then
        begin
            c[i]:=false;
            inc(m);
            if m=k then begin inc(ans);end;

            if m<k then go(t+1);
            dec(m);
            c[i]:=true;
        end;
    if m<k then go(t+1);
end;

begin

    readln(n,k);
  while not((n=-1)and(k=-1)) do
  begin
    fillchar(c,sizeof(c),true);
    for i:=1 to n do
    begin
        for j:=1 to n do
            read(a[i,j]);
        readln;
    end;
    ans:=0;
    m:=0;
    go(1);
    writeln(ans);
    readln(n,k);
  end;
end.

/**************************************************************
	Problem: 2127
	User: admin
	Language: Pascal
	Result: Wrong Answer
****************************************************************/