#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 20 | 1;
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
int a[N], s[N];
const int mod = 1e9 + 7;
inline void DFT(int n) {
  int i, o, k, x, y;
  for (i = 1; i < n; i <<= 1)
    for (o = 0; o < n; o += i << 1)
      for (k = 0; k < i; k++) {
        x = a[o + k], y = a[o + k + i];
        a[o + k] = (x + y) % mod;
        a[o + k + i] = (x - y) % mod;
      }
}
int main() {
  int i, ans = 0, n = 1 << gi();
  char c;
  const int inv2 = (mod + 1) >> 1;
  for (i = 0; i < n; a[i++] = c == '1')
    while ((c = getchar()) != '0' && c != '1')
      ;
  DFT(n);
  for (i = 0; i < n; i++) a[i] = 1LL * a[i] * a[i] % mod;
  DFT(n);
  s[0] = 1;
  for (i = 0; i < n; i++) {
    s[i] = s[i >> 1];
    if (i & 1) s[i] = 1LL * s[i] * inv2 % mod;
    ans = (ans + 1LL * s[i] * a[i]) % mod;
  }
  ans = 3LL * ans % mod;
  cout << (ans + mod) % mod << endl;
  return 0;
}
