#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2005;
const int MOD = 111539786;
int n, k, nodes = 0;
int trie[N][2], fail[N], dp[2][N];
bool bad[N];
void insert(string s) {
int u = 0;
for (int i = 0; i < (int)s.size(); i++) {
int c = s[i] - '0';
if (!trie[u][c]) trie[u][c] = ++nodes;
u = trie[u][c];
}
bad[u] = true;
}
void build() {
queue<int> q;
for (int c = 0; c < 2; c++)
if (trie[0][c]) q.push(trie[0][c]);
while (!q.empty()) {
int u = q.front(); q.pop();
for (int c = 0; c < 2; c++) {
if (trie[u][c]) {
fail[trie[u][c]] = trie[fail[u]][c];
bad[trie[u][c]] |= bad[fail[trie[u][c]]];
q.push(trie[u][c]);
} else trie[u][c] = trie[fail[u]][c];
}
}
}
void solve() {
cin >> n >> k;
for (int i = 0; i < k; i++) {
string s; cin >> s;
insert(s);
}
build();
int cur = 0;
dp[cur][0] = 1;
for (int i = 0; i < n; i++) {
int nxt = cur ^ 1;
memset(dp[nxt], 0, sizeof dp[nxt]);
for (int u = 0; u <= nodes; u++) {
if (dp[cur][u] == 0) continue;
for (int c = 0; c < 2; c++) {
int v = trie[u][c];
if (!bad[v]) {
dp[nxt][v] += dp[cur][u];
if (dp[nxt][v] >= MOD) dp[nxt][v] -= MOD;
}
}
}
cur = nxt;
}
int ans = 0;
for (int u = 0; u <= nodes; u++) {
ans += dp[cur][u];
if (ans >= MOD) ans -= MOD;
}
cout << ans << '\n';
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
#define TASK "DNASEQ"
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifndef LOCAL
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgbGwgbG9uZyBsb25nCgpjb25zdCBpbnQgTiA9IDIwMDU7CmNvbnN0IGludCBNT0QgPSAxMTE1Mzk3ODY7CgppbnQgbiwgaywgbm9kZXMgPSAwOwppbnQgdHJpZVtOXVsyXSwgZmFpbFtOXSwgZHBbMl1bTl07CmJvb2wgYmFkW05dOwoKdm9pZCBpbnNlcnQoc3RyaW5nIHMpIHsKICAgIGludCB1ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludClzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgaW50IGMgPSBzW2ldIC0gJzAnOwogICAgICAgIGlmICghdHJpZVt1XVtjXSkgdHJpZVt1XVtjXSA9ICsrbm9kZXM7CiAgICAgICAgdSA9IHRyaWVbdV1bY107CiAgICB9CiAgICBiYWRbdV0gPSB0cnVlOwp9Cgp2b2lkIGJ1aWxkKCkgewogICAgcXVldWU8aW50PiBxOwogICAgZm9yIChpbnQgYyA9IDA7IGMgPCAyOyBjKyspCiAgICAgICAgaWYgKHRyaWVbMF1bY10pIHEucHVzaCh0cmllWzBdW2NdKTsKICAgIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICAgICAgaW50IHUgPSBxLmZyb250KCk7IHEucG9wKCk7CiAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAyOyBjKyspIHsKICAgICAgICAgICAgaWYgKHRyaWVbdV1bY10pIHsKICAgICAgICAgICAgICAgIGZhaWxbdHJpZVt1XVtjXV0gPSB0cmllW2ZhaWxbdV1dW2NdOwogICAgICAgICAgICAgICAgYmFkW3RyaWVbdV1bY11dIHw9IGJhZFtmYWlsW3RyaWVbdV1bY11dXTsKICAgICAgICAgICAgICAgIHEucHVzaCh0cmllW3VdW2NdKTsKICAgICAgICAgICAgfSBlbHNlIHRyaWVbdV1bY10gPSB0cmllW2ZhaWxbdV1dW2NdOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IGs7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGs7IGkrKykgewogICAgICAgIHN0cmluZyBzOyBjaW4gPj4gczsKICAgICAgICBpbnNlcnQocyk7CiAgICB9CiAgICBidWlsZCgpOwogICAgaW50IGN1ciA9IDA7CiAgICBkcFtjdXJdWzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSAgewogICAgICAgIGludCBueHQgPSBjdXIgXiAxOwogICAgICAgIG1lbXNldChkcFtueHRdLCAwLCBzaXplb2YgZHBbbnh0XSk7CiAgICAgICAgZm9yIChpbnQgdSA9IDA7IHUgPD0gbm9kZXM7IHUrKykgewogICAgICAgICAgICBpZiAoZHBbY3VyXVt1XSA9PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAyOyBjKyspIHsKICAgICAgICAgICAgICAgIGludCB2ID0gdHJpZVt1XVtjXTsKICAgICAgICAgICAgICAgIGlmICghYmFkW3ZdKSB7CiAgICAgICAgICAgICAgICAgICAgZHBbbnh0XVt2XSArPSBkcFtjdXJdW3VdOwogICAgICAgICAgICAgICAgICAgIGlmIChkcFtueHRdW3ZdID49IE1PRCkgZHBbbnh0XVt2XSAtPSBNT0Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY3VyID0gbnh0OwogICAgfQogICAgaW50IGFucyA9IDA7CiAgICBmb3IgKGludCB1ID0gMDsgdSA8PSBub2RlczsgdSsrKSB7CiAgICAgICAgYW5zICs9IGRwW2N1cl1bdV07CiAgICAgICAgaWYgKGFucyA+PSBNT0QpIGFucyAtPSBNT0Q7CiAgICB9CiAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpOwoKICAgICNkZWZpbmUgVEFTSyAiRE5BU0VRIgogICAgaWYgKGZvcGVuKFRBU0siLklOUCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKFRBU0siLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oVEFTSyIuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGludCB0ZXN0cyA9IDE7IC8vIGNpbiA+PiB0ZXN0czsKICAgIHdoaWxlICh0ZXN0cy0tKSBzb2x2ZSgpOwoKICAgICNpZm5kZWYgTE9DQUwKICAgIGNlcnIgPDwgIlxuVGltZSBlbGFwc2VkOiAiIDw8IDEuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAiIHMuXG4iOwogICAgI2VuZGlmCiAgICAKICAgIHJldHVybiAwOwp9Cg==