bool RegexEngine::setRegex(const std::string& regex)
{
	regex_.clear();
	regex_.textFormat_ = regex;
	bool isValid = buildAutomata();
	return isValid;
}
int main(void){
	int i, j, k, _case = 1;
	char c;

	for (i = 2; i < MAXN; i++)
		len[i] = min(len[i-1] + len[i-2], MAXSTR);

	for (i = 4, j = 3; i < MAXN && j < MAXSTR; i++)
		for (k = 0; k < len[i-2]; k++)
			if (j < MAXSTR)
				prefix[j++] = prefix[k];

	for (j = MAXSTR - len[24], k = 0; j < MAXSTR; j++, k++)
		suffix[0][j] = prefix[k];

	for (j = 0, k = len[23] - (MAXSTR - len[24]); k < len[23]; k++)
		suffix[0][j] = prefix[k];

	for (j = MAXSTR - len[23], k = 0; j < MAXSTR; j++, k++)
		suffix[1][j] = prefix[k];

	for (j = MAXSTR - len[23] - len[22], k = 0; k < len[22]; j++, k++)
		suffix[1][j] = prefix[k];

	for (j = MAXSTR - len[23] - len[22] - len[21], k = 0; k < len[21]; j++, k++)
		suffix[1][j] = prefix[k];

	for (j = 0, k = len[20] - (MAXSTR - len[23] - len[22] - len[21]); k < len[20]; k++)
		suffix[0][j] = prefix[k];

	while (scanf("%d\n", &N) != EOF){
		for (pLen = 0, c = getchar(); c == '0' || c == '1'; pLen++, c = getchar())
			pattern[pLen+1] = c == '1';
		pattern[pLen+1] = 2;

		buildAutomata();

		dp[0] = dp[1] = dp[2] = 0;

		if (pLen == 1)
			dp[2] = dp[pattern[1]] = 1;
		else if (pLen == 2 && pattern[1] == 1 && pattern[2] == 0)
			dp[2] = 1;

		for (i = 3; i <= N; i++)
			dp[i] = dp[i-1] + dp[i-2] + overlapping(i);

		printf("Case %d: %lld\n", _case++, dp[N]);
	}

	return 0;
}