#include <bits/stdc++.h>
using namespace std;
long long t = 20;
int ls;
string s = "10101010101010";
long long D[50][50][50];
void PR(int k) {
  for (int i = 0; i <= t; i++) {
    for (int j = 0; j < ls; j++) cout << setw(10) << D[k][i][j];
    cout << endl;
  }
  cout << endl;
}
int main() {
  cin >> t >> s;
  string sk;
  ls = s.size();
  for (int k = 0; k < ls; k++) {
    sk = s.substr(s.size() - k, k);
    D[k][k][0] = 1;
    for (int l = 1; l <= k; l++) {
      if (sk.substr(sk.size() - l, l) == s.substr(0, l)) D[k][k][l] = 1;
    }
    for (int i = k + 1; i <= t; i++) {
      for (int j = 0; j <= min(i, ls - 1); j++) {
        if (j == 0) {
          D[k][i][0] = 2 * D[k][i - 1][0] - D[k][i - 1][ls - 1];
        } else {
          D[k][i][j] = D[k][i - 1][j - 1];
          if (s.substr(0, j) == s.substr(s.size() - j, j)) {
            D[k][i][j] -= D[k][i - 1][ls - 1];
          }
        }
      }
    }
  }
  int pr = 0;
  for (int i = 1; i <= ls; i++) {
    int k = 0;
    for (int j = 0; j < ls; j++) {
      if (s[j] != s[j % i]) {
        k = 1;
        break;
      }
    }
    if (k == 0) {
      pr = i;
      break;
    }
  }
  int ls2 = ls + pr;
  long long n1 = 0;
  for (int i = ls - 1; i >= 1; i--) n1 += D[i][t][ls - i];
  long long n2 = 0;
  for (int i = ls - 1; i > pr; i--) n2 += D[i][t][ls2 - i];
  long long n = n1 - n2;
  long long ss = 1;
  for (int i = 1; i <= t; i++) ss *= 2;
  cout << ss - (D[0][t][0] - n) << endl;
}
