#include const long long Mod = 1000000000000000003, inv = 666666666666666669; __int128 div_mod(__int128 x, __int128 y, __int128 z) { if (x % y == 0) return x / y; else return (div_mod((1 + x / y) * y - x, (z % y), y) * z + x) / y; } __int128 prob(int l, int k) { return div_mod(l - k + 1, l + 1, Mod); } __int128 expect(int l, int k) { return (__int128)k * (2 * l - k + 2) * inv % Mod; } int main() { int N; char s[1000001]; scanf("%d", &N); scanf("%s", s); int h, i, j, k, l; __int128 ans = 0; for (h = N - 1; s[h] != '0'; h--); for (i = 0, j = 1; j <= h; j++) { if (s[j] != '0') continue; l = j - (h - N) - 1; k = j - i; ans += (prob(l, k) * expect(l, k) + prob(l, l - k + 1) * expect(l, l - k + 1)) % Mod; i = j; } printf("%lld\n", ans % Mod); fflush(stdout); return 0; }