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

typedef bitset<4010> B;
typedef long long ll;

const ll MOD = 998244353;

ll POW[4002];
void init(){
	POW[0] = 1;
	for(int i = 0 ; i < 4001 ; i ++){
		POW[i+1] = POW[i]*2;
		if(POW[i+1] >= MOD)POW[i+1] -= MOD;
	}
}

int find_last(B x){
	for(int i = 4009 ; i >= 0 ; i --){
		if(x[i])return i;
	}
	return -1;
}

B gcd(B x,B y){
	if(x.none())return y;
	int s = find_last(x);
	int t = find_last(y);
	if(s < t){
		swap(x,y);
		swap(s,t);
	}
	while(y.any()){
		x ^= y<<(s-t);
		s = find_last(x);
		if(s < t){
			swap(x,y);
			swap(s,t);
		}
	}
	return x;
}

int main(){
	init();
	int n;
	B x,a[7];
	cin >> n;
	cin >> x;
	for(int i = 0 ; i < n ; i ++){
		cin >> a[i];
	}
	
	for(int i = 1 ; i < n ; i ++){
		a[0] = gcd(a[0],a[i]);
	}
	
	ll ret = 0;
	int s = find_last(x);
	int t = find_last(a[0]);
	B y; y.reset();
	
	for(int i = s ; i >= t ; i --){
		if(x[i])ret += POW[i-t];
		if(x[i] != y[i])y ^= a[0] << (i-t);
	}
	for(int i = s ; i >= 0 ; i --){
		if(x[i] == y[i]){
			if(i == 0)ret ++;
			continue;
		}
		if(x[i])ret ++;
		break;
	}
	cout << ret%MOD << endl;
}
