const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        const n = parseInt(line);
        let s = await readline();
        s = ' ' + s + s;
        const MOD = 1e9 + 7;
        let ans = 0;
        let sum = 0; // 表示当前i结尾的长度是n的字符串的权值
        let sum0 = 0; // 表示当前窗口里0的权重和,从字符串的位置开始,第1个权重是1
        let sum1 = 0; // 表示当前i结尾的长度为2~n的字符串权值和
        let num0 = 0;
        let num1 = 0;

        for (let i = 1; i <= n; i++) {
            if(s[i] === '0') {
                num0 += 1;
                sum0 += i;
            } else {
                num1 += 1;
                sum1 += sum0;
                sum += num0;
            }
        }

        for (let i = n + 1; i <= n * 2; i++) {
            sum1 -= sum;
            sum0 -= num0;

            if (s[i] === '0') {
                sum -= num1;
                sum0 += n;
            } else {
                sum1 += sum0;
                sum += num0;
            }

            ans += sum1;
            ans %= MOD;
        }

        console.log(ans);
    }
}()