만드는 중입니다

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

XOR 연산

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

요약
모든 원소가 0인 수열 B에서 b_i와 b_j에 a_i xor a_j를 동시에 xor하는 연산으로 만들 수 있는 서로 다른 B의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

정수 a1,a2,…,ana_1, a_2, \dots, a_n이 nn개 주어진다. 처음에 모든 원소가 0인 정수열 B=(b1,b2,…,bn)B = (b_1, b_2, \dots, b_n)이 있다.

한 번의 연산에서는 서로 다른 두 인덱스 ii와 jj를 고른 뒤, 다음 두 가지 변경을 동시에 수행한다.

  • bib_i를 bi⊕ai⊕ajb_i \oplus a_i \oplus a_j로 바꾼다.
  • bjb_j를 bj⊕ai⊕ajb_j \oplus a_i \oplus a_j로 바꾼다.

여기서 ⊕\oplus는 비트별 XOR 연산이다. 예를 들어 3⊕10=93 \oplus 10 = 9이며, (0011)2⊕(1010)2=(1001)2(0011)_2 \oplus (1010)_2 = (1001)_2이기 때문이다.

길이가 nn인 두 수열은 어떤 인덱스 ii (1≤i≤n1 \le i \le n)에서 값이 다를 때 서로 다른 것으로 본다.

연산을 0번 이상 수행해서 얻을 수 있는 서로 다른 수열 BB의 개수를 구하라. 답은 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

입력

첫째 줄에 정수 nn (2≤n≤200 0002 \le n \le 200\,000)이 주어진다. 둘째 줄에는 정수 a1,a2,…,ana_1, a_2, \dots, a_n (0≤ai<2300 \le a_i < 2^{30})이 주어진다.

출력

얻을 수 있는 서로 다른 수열 BB의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 한 줄에 출력한다.

예제2

  1. 예제 1

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

    입력
    4
    852415 852415 852415 852415
    
    예상 출력
    1