while True:
try:
n = int(input())
s = input()
s = ' ' + s + s # 加一个空格,从索引1开始处理
MOD = 10 ** 9 + 7
ans = 0 # 最终答案
sum = 0 # 以即将被去除的滑动窗口前的那一个字符为开头的0/1个数
sum0 = 0 # 当前窗口中包含0的子序列数量
sum1 = 0 # 最大区间所有区间的0/1个数
num0 = 0 # 当前窗口中0的数量
num1 = 0 # 当前窗口中1的数量
for i in range(1, n+1): # 第一次遍历,初始化窗口的值
if s[i] == '0':
num0 += 1
sum0 += i
else:
num1 += 1
sum1 += sum0
sum += num0
for i in range(n+1, 2 * n + 1): # 滑动窗口
# 减去i-n作为边界的贡献
sum1 -= sum
sum0 -= num0
if s[i - n] == '0': # 如果溢出窗口的字符是0
num0 -= 1
sum -= num1
else:
num1 -= 1
if s[i] == '0': # 加入新字符的贡献
num0 += 1
sum0 += n
else:
num1 += 1
sum1 += sum0
sum += num0
ans += sum1 # 累加答案
ans %= MOD
print(ans)
except:
break