#include <bits/stdc++.h>
using namespace std;
using B = bitset<4000>;
using ll = long long;
string str; 
ll N, ans, dp[4000];
constexpr ll M{ 998244353 };
B bit_gcd(B a, B b) {
    if(a == B{}) return b;
    int msb_a{}, msb_b{};
    for(int i{}; i < 4000; ++i) {
        if(a.test(i)) msb_a = i;
        if(b.test(i)) msb_b = i;
    }
    b ^= a << (msb_b - msb_a);
    return bit_gcd(b, a);
}
int main() {
    dp[0] = 1;
    for(int i{ 1 }; i < 4000; ++i) dp[i] = dp[i - 1] * 2 % M;
    cin >> N >> str;
    B X(str), x, a;
    vector<B> v;
    for(int i{}; i < N; ++i) {
        cin >> str;
        v.emplace_back(str);
    }
    a = v.front();
    for(auto& b : v) {
        if(a == b) continue;
        for(int i{ 3999 }; i >= 0; --i) {
            if(a.test(i) && !b.test(i)) {
                swap(a, b);
                break;
            }
            if(!a.test(i) && b.test(i)) break;
        }
        a = bit_gcd(a, b);
    }
    int msb_X{}, msb_a{};
    for(int i{}; i < 4000; ++i) {
        if(X.test(i)) msb_X = i;
        if(a.test(i)) msb_a = i;
    }
    for(int i{ msb_X }; i >= msb_a; --i) {
        if(X.test(i)) ans = (ans + dp[i - msb_a]) % M;
        if(X.test(i) ^ x.test(i)) x ^= a << (i - msb_a);
    }
    ans = (ans + 1) % M;
    for(int i{ msb_a }; i >= 0; --i) {
        if(X.test(i) && !x.test(i)) break;
        if(!X.test(i) && x.test(i)) { --ans; break; }
    }
    cout << ans << endl;
}
