#include <bits/stdc++.h>
using namespace std;
#define int long long
#define dd double
#define ld long double
#define ull unsigned long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define el "\n"
#define Arwa ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fix(x) cout << fixed << setprecision(x)
#define all(v) v.begin(),v.end()
#define dpp(v,val) memset(v,val,sizeof(v))
#define mod 1e9+7
#define oo 1e9
const int N = 1e5 + 5;
int n,m;
vector<vector<int>>v;
map<pair<int,int>,bool>mp;
int dp[1003][1003];
bool valid(int i,int j)
{
    if(mp[{i,j}]==1) return false;
    return (i>=1&&i<=n&&j>=1&&j<=m);
}
int solve(int i,int j)
{
  if(!valid(i,j)) return 0;
  int& ret =dp[i][j];
  if(ret!=-1) return ret;
  if(i==n&&j==m) return 1;
  ret=solve(i,j+1)+solve(i+1,j);
  return ret;
}
void HereWeGoAgain()
{
    cin>>n>>m;
    cin.ignore();
    v.resize(n);
    for(int i=0;i<n;i++)
    {
        string s;
        getline(cin,s);
        for(int j=1;j<s.length();j++)
        {
        if(s[j]!=' ')
        mp[{i+1,(s[j]-'0')}]=1;
        }
    }
    dpp(dp,-1);
   //for(auto it:mp) if(it.second) cout<<it.first.first<<' '<<it.first.second<<el;
   cout<<solve(1,1);
}
int32_t main() 
{
    Arwa
    int t=1;
    cin>>t;
    cout<<el<<el;
    for(int i=1;i<=t;i++)
    {
    HereWeGoAgain();
    cout<<el<<el;
    }
    return 0;
} 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGRkIGRvdWJsZQojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIHllcyBjb3V0IDw8ICJZRVNcbiIKI2RlZmluZSBubyBjb3V0IDw8ICJOT1xuIgojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBBcndhIGlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBmaXgoeCkgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oeCkKI2RlZmluZSBhbGwodikgdi5iZWdpbigpLHYuZW5kKCkKI2RlZmluZSBkcHAodix2YWwpIG1lbXNldCh2LHZhbCxzaXplb2YodikpCiNkZWZpbmUgbW9kIDFlOSs3CiNkZWZpbmUgb28gMWU5CmNvbnN0IGludCBOID0gMWU1ICsgNTsKaW50IG4sbTsKdmVjdG9yPHZlY3RvcjxpbnQ+PnY7Cm1hcDxwYWlyPGludCxpbnQ+LGJvb2w+bXA7CmludCBkcFsxMDAzXVsxMDAzXTsKYm9vbCB2YWxpZChpbnQgaSxpbnQgaikKewogICAgaWYobXBbe2ksan1dPT0xKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gKGk+PTEmJmk8PW4mJmo+PTEmJmo8PW0pOwp9CmludCBzb2x2ZShpbnQgaSxpbnQgaikKewogIGlmKCF2YWxpZChpLGopKSByZXR1cm4gMDsKICBpbnQmIHJldCA9ZHBbaV1bal07CiAgaWYocmV0IT0tMSkgcmV0dXJuIHJldDsKICBpZihpPT1uJiZqPT1tKSByZXR1cm4gMTsKICByZXQ9c29sdmUoaSxqKzEpK3NvbHZlKGkrMSxqKTsKICByZXR1cm4gcmV0Owp9CnZvaWQgSGVyZVdlR29BZ2FpbigpCnsKICAgIGNpbj4+bj4+bTsKICAgIGNpbi5pZ25vcmUoKTsKICAgIHYucmVzaXplKG4pOwogICAgZm9yKGludCBpPTA7aTxuO2krKykKICAgIHsKICAgICAgICBzdHJpbmcgczsKICAgICAgICBnZXRsaW5lKGNpbixzKTsKICAgICAgICBmb3IoaW50IGo9MTtqPHMubGVuZ3RoKCk7aisrKQogICAgICAgIHsKICAgICAgICBpZihzW2pdIT0nICcpCiAgICAgICAgbXBbe2krMSwoc1tqXS0nMCcpfV09MTsKICAgICAgICB9CiAgICB9CiAgICBkcHAoZHAsLTEpOwogICAvL2ZvcihhdXRvIGl0Om1wKSBpZihpdC5zZWNvbmQpIGNvdXQ8PGl0LmZpcnN0LmZpcnN0PDwnICc8PGl0LmZpcnN0LnNlY29uZDw8ZWw7CiAgIGNvdXQ8PHNvbHZlKDEsMSk7Cn0KaW50MzJfdCBtYWluKCkgCnsKICAgIEFyd2EKICAgIGludCB0PTE7CiAgICBjaW4+PnQ7CiAgICBjb3V0PDxlbDw8ZWw7CiAgICBmb3IoaW50IGk9MTtpPD10O2krKykKICAgIHsKICAgIEhlcmVXZUdvQWdhaW4oKTsKICAgIGNvdXQ8PGVsPDxlbDsKICAgIH0KICAgIHJldHVybiAwOwp9IA==