#P1410. 连携并发

连携并发

连携并发

题目描述

Orange在一个数轴上建立了若干个能源站,这些能源站会两两相应产生能量。对于位于位置 ppqq 的两座能源站来说,他们会相互连携,产生 pq|p - q| 个单位的能量。

现在,Orange会给你一个长度为 nn 的01串,其中 si=1s_i = 1 表示在坐标 ii 处有一座能源站。

你的任务是,求出Orange建立的所有能量站,他们一共会产生多少能量,由于答案可能很大,请你对 109+710^9+7mod\bmod

特别的,由于能量站之间是无序的,因此 (p,q)(p, q)(q,p)(q, p) 算作同一对能量站,他们只会产生一次能量。

形式化的说,你应该求出如下函数的值:

$$f = \sum_{i=1}^n \sum_{j=i}^n [s_i = 1][s_j = 1] |j - i|$$

其中,[condition][condition] 为条件数,其中若 conditioncondition 成立,则条件数为 11,否则为 00

输入格式

输入包含2行: 第一行为一个整数 nn,表示01串长度。 第二行为一个长度为 nn 的01串。

数据范围

1n1051 \le n \le 10^5 si{0,1}s_i \in \{0,1\}

输出格式

输出一个答案,对 109+710^9+7mod\bmod

样例 #1

样例输入 #1

5
10001

样例输出 #1

4