#include<deque>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
#include<string>
#include<iostream>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int a[12][12],sx,sy,n;
int fn(int x,int y,int p){
  int i;
  int ct=0;
  if(p==n){
    if(x==sx||y==sy)
      ct=1;
  }else{
    a[x][y]=0;
    for(i=1;a[x+i][y]==0;i++);
    if(a[x+i][y]!=-1)
      ct+=fn(x+i,y,p+1);
    for(i=1;a[x-i][y]==0;i++);
    if(a[x-i][y]!=-1)
      ct+=fn(x-i,y,p+1);
    for(i=1;a[x][y+i]==0;i++);
    if(a[x][y+i]!=-1)
      ct+=fn(x,y+i,p+1);
    for(i=1;a[x][y-i]==0;i++);
    if(a[x][y-i]!=-1)
      ct+=fn(x,y-i,p+1);
    a[x][y]=1;
  }
  return ct;
}
int main(){
  int i,j;
  int w,h;
  while(cin>>w>>h&&(w||h)){
    memset(a,-1,sizeof(a));
    n=0;
    for(i=1;i<h+1;i++){
      for(j=1;j<w+1;j++){
	cin>>a[j][i];
	if(0){
	}else if(a[j][i]==1){
	  n++;
	}else if(a[j][i]==2){
	  sx=j;
	  sy=i;
	}
      }
    }
    cout<<fn(sx,sy,0)<<endl;
  }
  return 0;
}