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

#define int long long

#define rep(i,n) for(int i=0;i<(n);i++)
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define fi first
#define se second
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;

template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}

typedef bitset<4000>bs;

bs in(){
    string s;cin>>s;
    reverse(all(s));
    bs ret;
    rep(i,s.size())ret[i]=s[i]-'0';
    return ret;
}

bs mo(bs &a,bs &b){
    bs c=a;


    int k=0;
    rep(i,4000)if(b[i])k=i;
    for(int i=4000-1;i>=k;i--){
        if(c[i]){
            c^=(b<<(i-k));
        }
    }
    return c;
}

bs gcd(bs a,bs b){
    if(b.count()==0)return a;
    bs c=mo(a,b);
    return gcd(b,c);
}

const int mod=998244353;

int N;
int po[4444];
signed main(){
    po[0]=1;
    for(int i=1;i<4444;i++)po[i]=po[i-1]*2%mod;
    cin>>N;
    bs X=in();

    bs g;
    rep(i,N){
        bs A=in();
        g=gcd(A,g);
    }

    bs x;
    int k=0;
    rep(i,4000)if(g[i])k=i;

    int ans=0;
    for(int i=4000-1;i>=k;i--){
        if(X[i]){
            ans=(ans+po[i-k])%mod;
            if(x[i]==0){
                x^=g<<(i-k);
            }
        }
        else{
            if(x[i]==1){
                x^=g<<(i-k);
            }
        }
    }
    ans++;
    for(int i=4000-1;i>=0;i--){
        if(X[i]==x[i])continue;
        if(X[i]<x[i])ans--;
        break;
    }
    ans%=mod;
    cout<<ans<<endl;
    return 0;
}
