CF1896H2.Cyclic Hamming (Hard Version)

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

This is the hard version of the problem. The only difference between the two versions is the constraint on kk . You can make hacks only if all versions of the problem are solved.

In this statement, all strings are 00 -indexed.

For two strings aa , bb of the same length pp , we define the following definitions:

  • The hamming distance between aa and bb , denoted as h(a,b)h(a, b) , is defined as the number of positions ii such that 0i<p0 \le i < p and aibia_i \ne b_i .
  • bb is a cyclic shift of aa if there exists some 0k<p0 \leq k < p such that b(i+k)modp=aib_{(i+k) \bmod p} = a_i for all 0i<p0 \le i < p . Here xmodyx \bmod y denotes the remainder from dividing xx by yy .

You are given two binary strings ss and tt of length 2k+12^{k+1} each. Both strings may contain missing characters (denoted by the character '?'). Your task is to count the number of ways to replace the missing characters in both strings with the characters '0' or '1' such that:

  • Each string ss and tt contains exactly 2k2^k occurrences of each character '0' and '1'
  • h(s,c)2kh(s, c) \ge 2^k for all strings cc that is a cyclic shift of tt .

As the result can be very large, you should print the value modulo 998244353998\,244\,353 .

输入格式

The first line of the input contains a single integer kk ( 1k121 \le k \le 12 ).

The second line of the input contains string ss of size 2k+12^{k+1} , consisting of the characters '0', '1' and '?'.

The third line of the input contains string tt of size 2k+12^{k+1} , consisting of the characters '0', '1' and '?'.

It is guaranteed that both strings ss and tt contains no more than 2k2^k character '0' or '1'.

输出格式

Print a single integer — the answer to the problem modulo 998244353998\,244\,353 .

输入输出样例

  • 输入#1

    1
    0011
    0101

    输出#1

    1
  • 输入#2

    1
    0011
    0110

    输出#2

    0
  • 输入#3

    1
    0??1
    01??

    输出#3

    2
  • 输入#4

    2
    000?????
    01010101

    输出#4

    3
  • 输入#5

    2
    0???????
    1???????

    输出#5

    68
  • 输入#6

    5
    0101010101010101010101010101010101010101010101010101010101010101
    ????????????????????????????????????????????????????????????????

    输出#6

    935297567

说明/提示

In the first example, we can check that the condition h(s,c)2kh(s, c) \ge 2^k for all cyclic shift cc of tt is satisfied. In particular:

  • for c=0101c = \mathtt{0101} , h(s,c)=h(0110,0101)=221h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1 ;
  • for c=1010c = \mathtt{1010} , h(s,c)=h(0110,1010)=221h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1 .

In the second example, there exists a cycle shift cc of tt such that h(s,c)<2kh(s, c) < 2^k (in particular, c=0011c = \mathtt{0011} , and h(s,c)=h(0011,0011)=0h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0 ).

In the third example, there are 22 possible ways to recover the missing characters:

  • s=0101s = \mathtt{0101} , t=0110t = \mathtt{0110} ;
  • s=0011s = \mathtt{0011} , t=0101t = \mathtt{0101} .

In the fourth example, there are 33 possible ways to recover the missing characters:

  • s=00011110s = \mathtt{00011110} , t=01010101t = \mathtt{01010101} ;
  • s=00011011s = \mathtt{00011011} , t=01010101t = \mathtt{01010101} ;
  • s=00001111s = \mathtt{00001111} , t=01010101t = \mathtt{01010101} .
首页