local mod = 1000000007
local function badd(x, y) return (x + y) % mod end
local mfl = math.floor

local function bmul(x, y)
  local x1, y1 = mfl(x / 31623), mfl(y / 31623)
  local x0, y0 = x - x1 * 31623, y - y1 * 31623
  return (x1 * y1 * 14122 + (x1 * y0 + x0 * y1) * 31623 + x0 * y0) % mod
end

local function modpow(src, pow)
  local res = 1
  while 0 < pow do
    if pow % 2 == 1 then
      res = bmul(res, src)
      pow = pow - 1
    end
    src = bmul(src, src)
    pow = mfl(pow / 2)
  end
  return res
end

local function modinv(src)
  return modpow(src, mod - 2)
end

local n = io.read("*n", "*l")
local _u = io.read()
local slen = #_u
local dp1, dp2 = {}, {}
dp1[1] = 1
for i = 1, n do
  local src = i % 2 == 1 and dp1 or dp2
  local dst = i % 2 == 1 and dp2 or dp1
  for j = 1, i + 1 do
    dst[j] = 0
  end
  dst[1] = src[1]
  dst[2] = badd(dst[2], src[1] + src[1])
  for j = 2, i do
    dst[j - 1] = badd(dst[j - 1], src[j])
    dst[j + 1] = badd(dst[j + 1], src[j] + src[j])
  end
end

local tbl = n % 2 == 0 and dp1 or dp2
local ret = tbl[1 + slen]
local denom = modinv(modpow(2, slen))
print(bmul(ret, denom))
