#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 65;
int n, m;
string s;
int pi[N], nxt[N][2];
ll dp[N][N];
void solve() {
cin >> n >> s;
m = (int)s.size();
for (int i = 1; i < m; i++) {
int j = pi[i - 1];
while (j > 0 && s[i] != s[j]) j = pi[j - 1];
if (s[i] == s[j]) j++;
pi[i] = j;
}
for (int i = 0; i <= m; i++)
for (int c = 0; c < 2; c++) {
if (c == (s[i] - '0')) nxt[i][c] = i + 1;
else if (i > 0) nxt[i][c] = nxt[pi[i - 1]][c];
}
ll res = 0;
for (int k = 0; k < m; k++) {
memset(dp, 0, sizeof dp);
dp[0][k] = 1;
for (int i = 0; i < n; i++) {
for (int u = 0; u < m; u++) {
for (int c = 0; c < 2; c++) {
int v = nxt[u][c];
if (v < m) dp[i + 1][v] += dp[i][u];
}
}
}
res += dp[n][k];
}
cout << (1LL << n) - res << "\n";
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
#define TASK "PLASMID"
if (fopen(TASK".INP", "r")) {
freopen(TASK".INP", "r", stdin);
freopen(TASK".OUT", "w", stdout);
}
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << clock() << " ms.\n";
#endif
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmNvbnN0IGludCBOID0gNjU7CgppbnQgbiwgbTsKc3RyaW5nIHM7CmludCBwaVtOXSwgbnh0W05dWzJdOwpsbCBkcFtOXVtOXTsKCnZvaWQgc29sdmUoKSB7CiAgICBjaW4gPj4gbiA+PiBzOwogICAgbSA9IChpbnQpcy5zaXplKCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IG07IGkrKykgewogICAgICAgIGludCBqID0gcGlbaSAtIDFdOwogICAgICAgIHdoaWxlIChqID4gMCAmJiBzW2ldICE9IHNbal0pIGogPSBwaVtqIC0gMV07CiAgICAgICAgaWYgKHNbaV0gPT0gc1tqXSkgaisrOwogICAgICAgIHBpW2ldID0gajsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG07IGkrKykKICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IDI7IGMrKykgewogICAgICAgICAgICBpZiAoYyA9PSAoc1tpXSAtICcwJykpIG54dFtpXVtjXSA9IGkgKyAxOwogICAgICAgICAgICBlbHNlIGlmIChpID4gMCkgbnh0W2ldW2NdID0gbnh0W3BpW2kgLSAxXV1bY107CiAgICAgICAgfQogICAgbGwgcmVzID0gMDsKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbTsgaysrKSB7CiAgICAgICAgbWVtc2V0KGRwLCAwLCBzaXplb2YgZHApOwogICAgICAgIGRwWzBdW2tdID0gMTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBmb3IgKGludCB1ID0gMDsgdSA8IG07IHUrKykgewogICAgICAgICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCAyOyBjKyspIHsKICAgICAgICAgICAgICAgICAgICBpbnQgdiA9IG54dFt1XVtjXTsKICAgICAgICAgICAgICAgICAgICBpZiAodiA8IG0pIGRwW2kgKyAxXVt2XSArPSBkcFtpXVt1XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXMgKz0gZHBbbl1ba107CiAgICB9CiAgICBjb3V0IDw8ICgxTEwgPDwgbikgLSByZXMgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwoKICAgICNkZWZpbmUgVEFTSyAiUExBU01JRCIKICAgIGlmIChmb3BlbihUQVNLIi5JTlAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbihUQVNLIi5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKFRBU0siLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBpbnQgdGVzdHMgPSAxOyAvLyBjaW4gPj4gdGVzdHM7CiAgICB3aGlsZSAodGVzdHMtLSkgc29sdmUoKTsKCiAgICAjaWZkZWYgTE9DQUwKICAgIGNlcnIgPDwgIlxuVGltZSBlbGFwc2VkOiAiIDw8IGNsb2NrKCkgPDwgIiBtcy5cbiI7CiAgICAjZW5kaWYKICAgIHJldHVybiAwOwp9