#include <bits/stdc++.h>

const int N = 4000, mod = 998244353;
typedef std::bitset<N> bitset;

bitset X, G, A, now;
int g, n, x, ans, p[N];

void up(int &x, int y) {x += y - mod, x += x >> 31 & mod;}
int length(const bitset &a) {
	for (int i = N - 1; ~i; --i) if (a.test(i)) return i;
	return -1;
}
void poly_mod(bitset &a, const bitset &g, int &lena, int leng) {
	for (int i = lena; i >= leng; --i) if (a.test(i))
		a ^= g << i - leng;
	while (lena >= 0 && !a.test(lena)) --lena;
}
void poly_gcd(bitset &g, bitset &a, int &leng, int &lena) {
	if (g.none()) {g = a, leng = lena; return;}
	poly_mod(a, g, lena, leng), poly_gcd(a, g, lena, leng);
}
void read(bitset &b) {
	b.reset(); std::string s; std::cin >> s, std::reverse(s.begin(), s.end());
	for (int i = 0; i < s.size(); ++i) b.set(i, s[i] & 1);
}
bool leq(const bitset &a, const bitset &b) {
	for (int i = N - 1; ~i; --i)
		if (a.test(i) != b.test(i))
			return a.test(i) < b.test(i);
	return 1;
}

int main() {
	std::ios::sync_with_stdio(0), std::cin.tie(0);
	std::cin >> n, read(X), x = length(X);
	for (int i = 0, a; i < n; ++i)
		read(A), poly_gcd(G, A, g, a = length(A));
	p[0] = 1; for (int i = 1; i <= x; ++i) up(p[i] = p[i - 1], p[i - 1]);
	for (int i = x; i >= g; --i) {
		if (X.test(i)) up(ans, p[i - g]);
		if (now.test(i) != X.test(i)) now ^= G << i - g;
	}
	up(ans, leq(now, X)), std::cout << ans << '\n';
	return 0;
}