#3544. H 说真话

H 说真话

题目描述

给定一个长度为 nn、字符集为 01? 的字符串 s1s2⋯sns_1s_2 \cdots s_n。

对于任意 k∈[1,n]k \in [1,n],考察字符串 Tk=t1t2⋯tnT_k = t_1 t_2 \cdots t_n,其中对于 1≤i≤n1 \le i \le n,

  • 若 si≠s_i \ne ?,则 ti=sit_i = s_i;
  • 否则,若 i≤ki \le k,ti=t_i = 0;
  • 否则 ti=ti−kt_i = t_{i-k},你可以通过递归地算出 ti−kt_{i-k} 得到 tit_i。

容易发现 TkT_k 的字符集为 01。你需要对所有 k∈[1,n]k \in [1,n] 求出 TkT_k 中 1 的个数。

输入格式

输入的第一行一个整数 n(1≤n≤105)n (1 \le n \le 10^5) 表示字符串长度,第二行一个长度为 nn、字符集为 01? 的字符串 s1s2⋯sns_1s_2\cdots s_n。

输出格式

输出 nn 行,第 ii 行一个整数表示 TiT_i 中 1 的个数。

5
10?1?
3
4
2
3
2

说明/提示

T1=T_1 = 10011,T2=T_2 = 10111,T3=T_3 = 10010,T4=T_4 = 10011,T5=T_5 = 10010。