

#include <bits/stdc++.h>
using namespace std;

//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;

#define Boost           ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0)
#define see(x)        cerr<< __LINE__ << ": " << (#x) << " is "<< (x) <<'\n';
#define pb              push_back
#define inf             1e10
#define rep(i,n)        for(int i=0;i<n;i++)
#define rep1(i,n)       for(int i=1;i<=n;i++)
#define ll              long long
#define MOD             1000000007
#define mem(x,i)        memset(x,i,sizeof x)
#define Ones(x)         __builtin_popcount(x);
#define PI              acos(-1.0)
#define ff              first
#define ss              second
#define T               int t;cin>>t;while(t--)
#define ok              cout<<"ok"<<endl;
#define all(x)          (x).begin(),(x).end()
#define ordered_set     tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define nln	            cout<<endl;
#define maxn 300005

int dx[]= {-1,0,1,0}; //up,right,down,left
int dy[]= {0,1,0,-1};


ll cal(ll r,ll n)
{
    r=r-1;
    n=n+r;
//    see(n)
//    see(r)
    ll i,j,res=1;
    if(r>n-r)
        r=n-r;
    for(i=0; i<r; i++)
    {
        res*=((n-i))%MOD;
        res/=((i+1))%MOD;

    }
    return res%MOD;
}

int main()
{
    Boost;

    T
    {
        ll n,x=0,i,j,prev=0,digit,ans=1,flag=0;
        string s;
        cin>>n;
        cin>>s;

        for(i=0; i<s.size(); i++)
        {
            if(s[i]!='-')
            {
                if(prev==0)
                {
                    prev=s[i]-'0';
                }
                else
                {
                    x=s[i]-'0';
                    if(x<prev)
                    {
                        flag=1;
                        break;
                    }
                    else
                        prev=x;
                }
            }
        }
        if(flag)
        {
            cout<<"0"<<endl;
            continue;
        }

        prev=0;
        x=0;
        for(i=0; i<s.size(); i++)
        {
            if(s[i]!='-')
            {
                if(x>0)
                {
                    //see(x)
                    if(prev==0)
                    {
                        prev=s[i]-'0';
                        digit=prev;
                        //see(digit)
                        ans*=(cal(digit,x))%MOD;
                        x=0;
                    }
                    else
                    {
                        digit=(s[i]-'0')-prev-1+2;
                        //see(digit)
                        ans*=(cal(digit,x))%MOD;
                        x=0;
                        prev=s[i]-'0';
                    }
                }
                else
                {
                    prev=s[i]-'0';
                }
            }
            else
                x++;
        }
        //see(ans)
        //see(x)
        if(x>0)
        {
            if(prev==0)
            {
                ans*=(cal(9,x))%MOD;
            }
            else
            {
                //see(prev)
                ll f=9-prev+1;
                // see(f)
                ans*=(cal(f,x))%MOD;
            }
        }
        cout<<ans<<endl;
    }



}
/*
1
5
--3--

*/
