#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cstring>
const int MOD = 100000000;
using namespace std;
int dp[20][600];
int cur[20];
int state[600];
int m , n;
int top;
void init()
{
top = 0 ;
int sum = 1 << n;
for ( int i = 0 ;i < sum ; i ++ )
if ( !(i & i<<1) ) state[top++] = i;//cout << i << endl;
}
int isok( int x , int k )
{
if ( x & cur[k] ) return 0;
return 1;
}
int main()
{
while ( scanf("%d%d" , &m ,&n ) != EOF )
{
init();
memset ( dp , 0 , sizeof ( dp ));
for ( int i = 1 ; i <= m ; i ++ )
{
int num;
cur[i] = 0;
for ( int j = 1 ; j <= n ;j ++ )
{
scanf("%d" , &num );
if ( !num )
cur[i] += ( 1<<(n-j));
}
}
for ( int i = 1 ; i <= top ; i ++ )
if ( isok( state[i] , 1 ) )
dp[1][i] = 1;
for ( int i = 2 ; i <= m ; i ++ )
{
for ( int j = 1 ; j <= top ; j ++ )
{
if ( !isok ( state[j] , i ) ) continue;
for ( int k = 1 ; k <= top ; k ++ )
{
//if ( !isok( state[k] , i-1 )) continue;
if ( state[j] & state[k] ) continue;
dp[i][j] += dp[i-1][k]%MOD;
dp[i][j] %= MOD;
}
}
}
int ans = 0;
for ( int i = 1 ;i <= top ; i ++ )
{
ans += dp[m][i]%MOD;
//cout << dp[m][i] << endl;
ans %= MOD;
}
//cout << top << endl;
printf("%d\n", ans%MOD);
}
return 0;
}