만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

비트 연산

시간 제한2초메모리 제한1024 MB

요약
0과 1로 이루어진 배열에서 인접한 두 원소를 AND 또는 OR로 N-1번 합쳐 최종 값이 1이 되는 경우의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
조합론, 수학
정답자
아직 제출이 없습니다

문제

길이가 NN인 정수 배열 AA가 주어진다. 배열의 원소는 00 또는 11이다. 처음에 aa는 배열 AA와 같다. 다음 연산을 N−1N-1번 수행한다.

  • 현재 aa의 길이를 nn이라 하자. 정수 ii (1≤i≤n−11 \leq i \leq n-1)를 고르고, aa의 ii번째 원소와 i+1i+1번째 원소를 삭제한다. 삭제한 두 원소를 각각 xx, yy라 하자. 삭제한 위치에 x&yx \mathbin{\&} y 또는 x∣yx \mathbin{|} y 중 하나를 삽입한다. 여기서 &\&는 비트 AND, ∣|는 비트 OR이다.

연산을 수행하는 방법은 2N−1×(N−1)!2^{N-1} \times (N-1)!가지이다. 최종적으로 값이 11인 원소 하나만 남는 방법의 수를 세어라. 답은 998244353998244353으로 나눈 나머지를 구한다.

입력

첫째 줄에 정수 NN (1≤N≤1061 \leq N \leq 10^6)이 주어진다.

둘째 줄에 정수 A1,A2,…,ANA_1, A_2, \ldots, A_N (0≤Ai≤10 \leq A_i \leq 1)이 주어진다.

출력

답을 출력한다.

예제3

  1. 예제 1

    입력
    3
    0 1 0
    
    예상 출력
    2
    
  2. 예제 2

    입력
    5
    1 1 1 1 1
    
    예상 출력
    384
    
  3. 예제 3

    입력
    7
    0 1 1 0 1 0 1
    
    예상 출력
    25515