만드는 중입니다

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

XOR 행렬식

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

요약
배열 b와 c로 만든 n×n 행렬 A(A_ij = b_i XOR c_j)의 행렬식을 998244353으로 나눈 나머지를 구합니다.
난이도

보통10점 중 7점

유형
수학, 행렬, 비트 연산
정답자
아직 제출이 없습니다

문제

길이가 nn인 두 배열 bb와 cc가 주어진다. 두 배열의 원소는 모두 음이 아닌 정수이다. n×nn \times n 행렬 AA를 Aij=bi⊕cjA_{ij} = b_i \oplus c_j로 정의한다. AA의 행렬식을 998244353998244353으로 나눈 나머지를 구한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수 tt (1≤t≤10001 \le t \le 1000)가 주어진다. 각 테스트 케이스의 첫 줄에는 정수 nn (1≤n≤50001 \le n \le 5000)이 주어진다. 다음 줄에는 b1,b2,…,bnb_1, b_2, \ldots, b_n (0≤bi<2600 \le b_i < 2^{60})이, 그 다음 줄에는 c1,c2,…,cnc_1, c_2, \ldots, c_n (0≤ci<2600 \le c_i < 2^{60})이 주어진다. 모든 테스트 케이스의 nn 합은 1000010000을 넘지 않는다.

출력

각 테스트 케이스마다 AA의 행렬식을 998244353998244353으로 나눈 나머지를 한 줄에 출력한다.

힌트

첫 번째 테스트 케이스: ∣6314∣=6⋅4−1⋅3=21\begin{vmatrix} 6 & 3 \\ 1 & 4 \end{vmatrix} = 6 \cdot 4 - 1 \cdot 3 = 21이다. 두 번째 테스트 케이스는 1×11 \times 1 행렬이므로 ∣23792195055071677∣=23792195055071677\begin{vmatrix} 23792195055071677 \end{vmatrix} = 23792195055071677이다. 998244353998244353으로 나눈 나머지는 214139910214139910이다. 세 번째 테스트 케이스의 ∣0325301621075670∣\begin{vmatrix} 0 & 3 & 2 & 5 \\ 3 & 0 & 1 & 6 \\ 2 & 1 & 0 & 7 \\ 5 & 6 & 7 & 0 \end{vmatrix}는 다음과 같이 전개된다. 3⋅3⋅7⋅7−3⋅1⋅7⋅5−3⋅6⋅2⋅7−2⋅3⋅7⋅6+2⋅6⋅2⋅6−2⋅6⋅1⋅5−5⋅3⋅1⋅7−5⋅1⋅2⋅6+5⋅1⋅1⋅5=441−105−252−252+144−60−105−60+25=−2243 \cdot 3 \cdot 7 \cdot 7 - 3 \cdot 1 \cdot 7 \cdot 5 - 3 \cdot 6 \cdot 2 \cdot 7 - 2 \cdot 3 \cdot 7 \cdot 6 + 2 \cdot 6 \cdot 2 \cdot 6 - 2 \cdot 6 \cdot 1 \cdot 5 - 5 \cdot 3 \cdot 1 \cdot 7 - 5 \cdot 1 \cdot 2 \cdot 6 + 5 \cdot 1 \cdot 1 \cdot 5 = 441 - 105 - 252 - 252 + 144 - 60 - 105 - 60 + 25 = -224 −224-224를 998244353998244353으로 나눈 나머지는 998244129998244129이다.

예제1

  1. 예제 1

    입력
    3
    2
    2 5
    4 1
    1
    1000000000000000001
    987467354324283836
    4
    1 2 3 4
    1 2 3 4
    
    예상 출력
    21
    214139910
    998244129