Codecraft-17 and Codeforces Round 391 (Div. 1 + Div. 2, combined)
D
Felicity's Big Secret Revealed
Codeforces
2200
原题
← CE →
翻译中…

The gym leaders were fascinated by the evolutions which took place at Felicity camp. So, they were curious to know about the secret behind evolving Pokemon.

翻译中…

The organizers of the camp gave the gym leaders a PokeBlock, a sequence of $*n*$ ingredients. Each ingredient can be of type $0$ or $1$. Now the organizers told the gym leaders that to evolve a Pokemon of type $*k*$ ($*k* ≥ 2$), they need to make a valid set of $*k*$ cuts on the PokeBlock to get smaller blocks.

翻译中…

Suppose the given PokeBlock sequence is $*b*_{0}*b*_{1}*b*_{2}... *b*_{*n* - 1}$. You have a choice of making cuts at $*n* + 1$ places, i.e., Before $*b*_{0}$, between $*b*_{0}$ and $*b*_{1}$, between $*b*_{1}$ and $*b*_{2}$, ..., between $*b*_{*n* - 2}$ and $*b*_{*n* - 1}$, and after $*b*_{*n* - 1}$.

翻译中…

The $*n* + 1$ choices of making cuts are as follows (where a | denotes a possible cut):

翻译中…

$| *b*_{0} | *b*_{1} | *b*_{2} | ... | *b*_{*n* - 2} | *b*_{*n* - 1} |$

翻译中…

Consider a sequence of $*k*$ cuts. Now each pair of consecutive cuts will contain a binary string between them, formed from the ingredient types. The ingredients before the first cut and after the last cut are wasted, which is to say they are not considered. So there will be exactly $*k* - 1$ such binary substrings. Every substring can be read as a binary number. Let $*m*$ be the maximum number out of the obtained numbers. If all the obtained numbers are positive and the set of the obtained numbers contains all integers from $1$ to $*m*$, then this set of cuts is said to be a valid set of cuts.

翻译中…

For example, suppose the given PokeBlock sequence is $101101001110$ and we made $5$ cuts in the following way:

翻译中…

$10 | 11 | 010 | 01 | 1 | 10$

翻译中…

So the $4$ binary substrings obtained are: $11$, $010$, $01$ and $1$, which correspond to the numbers $3$, $2$, $1$ and $1$ respectively. Here $*m* = 3$, as it is the maximum value among the obtained numbers. And all the obtained numbers are positive and we have obtained all integers from $1$ to $*m*$. Hence this set of cuts is a valid set of $5$ cuts.

翻译中…

A Pokemon of type $*k*$ will evolve only if the PokeBlock is cut using a valid set of $*k*$ cuts. There can be many valid sets of the same size. Two valid sets of $*k*$ cuts are considered different if there is a cut in one set which is not there in the other set.

翻译中…

Let $*f*(*k*)$ denote the number of valid sets of $*k*$ cuts. Find the value of image. Since the value of $*s*$ can be very large, output $*s*$ modulo $10^{9} + 7$.

翻译中…

Input

翻译中…

The input consists of two lines. The first line consists an integer $*n*$ ($1 ≤ *n* ≤ 75$) — the length of the PokeBlock. The next line contains the PokeBlock, a binary string of length $*n*$.

翻译中…

Output

翻译中…

Output a single integer, containing the answer to the problem, i.e., the value of $*s*$ modulo $10^{9} + 7$.

翻译中…

Note

翻译中…

In the first sample, the sets of valid cuts are:

翻译中…

Size $2$: |1|011, 1|01|1, 10|1|1, 101|1|.

翻译中…

Size $3$: |1|01|1, |10|1|1, 10|1|1|, 1|01|1|.

翻译中…

Size $4$: |10|1|1|, |1|01|1|.

翻译中…

Hence, $*f*(2) = 4$, $*f*(3) = 4$ and $*f*(4) = 2$. So, the value of $*s* = 10$.

翻译中…

In the second sample, the set of valid cuts is:

翻译中…

Size $2$: |1|0.

翻译中…

Hence, $*f*(2) = 1$ and $*f*(3) = 0$. So, the value of $*s* = 1$.

翻译中…

样例

Input #1
4
1011
Output #1
10
InputCopy OutputCopy
Input #2
2
10
Output #2
1
InputCopy OutputCopy
题目信息
题号
757D
时间限制
4 s
内存限制
512 MB
标签
位运算
动态规划

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。