문제 보기 - XOR Bitshift (Hard) (POSTECH26PPC_G)

시간 제한메모리 제한제출 횟수제출한 사람 수해결한 사람 수정답률
1000 ms1024 MiB111100.00%

길이 $N$의 양의 정수 배열 $A$, $B$가 주어진다.

이때 아래의 연산들을 $70,000$번 이하로 사용하여 배열 $A$를 $B$와 같게 만들려고 한다.

  • A[i] = A[i] ^ A[j] (이때 $i \ne j$일 필요는 없다.)
  • A[i] = A[i] << 1 (즉, $A[i] := A[i] \times 2$)
  • A[i] = A[i] >> 1 (즉, $A[i] := \lfloor {A[i] \over 2} \rfloor$)

^ 기호는 Bitwise XOR 연산을 의미한다.

연산 과정에서 모든 $A[i]$의 값은 항상 $0$ 이상 $10^{18}$ 이하여야 한다. 즉, 어떤 시점에서도 $A[i]$가 $10^{18}$을 초과하면 안 된다.

위 연산들을 $70,000$번 이하로 사용하여 배열 $A$를 배열 $B$와 정확히 같게 만들 수 있는지 판단하라.

입력 형식

첫째 줄에 배열의 길이 $N$이 주어진다. ($2 \le N \le 10,000$)

둘째 줄에 $N$개의 정수 $A[1], A[2], \cdots ,A[N]$이 공백으로 구분되어 주어진다. ($1 \le A[i] \le 10^9$)

셋째 줄에 $N$개의 정수 $B[1], B[2], \cdots ,B[N]$이 공백으로 구분되어 주어진다. ($1 \le B[i] \le 10^9$)

출력 형식

첫째 줄에 두 배열을 같게 만들 수 있는 경우 $\texttt{YES}$, 그렇지 않으면 $\texttt{NO}$를 출력한다.

둘째 줄에 사용한 연산 횟수 $k$ 를 출력한다. ($0 \leq k \leq 70 ,000$)

다음 $k$개의 줄에 사용한 연산을 순서대로 출력한다.

이때 연산의 출력 형식은 다음과 같다:

  • 1 i j (A[i] = A[i] ^ A[j])
  • 2 i (A[i] = A[i] << 1)
  • 3 i (A[i] = A[i] >> 1)

가능한 방법이 여럿일 경우 그중 아무 것이나 출력한다.

예제

예제 1

입력

3
1 2 3
1 2 3

출력

YES
0

예제 2

입력

4
1 2 3 4
5 6 7 8

출력

YES
4
1 1 4
1 2 4
1 3 4
2 4