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