만드는 중입니다

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

신촌지역 초중고등학생 프로그래밍 대회 동아리 연합 대회

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

요약
빈 좌석에 8세부터 19세까지의 나이를 배정해 모든 AND, OR 조건을 만족하는지 확인하고, 가능하면 배치를 출력합니다.
난이도

보통10점 중 7점

유형
비트 연산, 그래프, 구현
정답자
아직 제출이 없습니다

문제

SUAPC의 성공에 힘입어, 연두는 "신촌지역 초중고등학생 프로그래밍 대회 동아리 연합 대회"의 개최를 기획하고 있다. 이 대회는 신촌의 초등학교, 중학교, 고등학교에 다니는 88세 이상 1919세 이하의 학생이라면 누구든 참가할 수 있다.

연두는 컴퓨터 과학을 바탕으로 자신이 연구한 풍수지리설과 사주팔자를 굳게 믿는다. 그래서 이번 대회가 성공하려면 참가자들의 나이에 따른 자리 배치가 매우 중요하다고 본다. 연두가 음양비트론에 따라 만든 데이터에는 xx번째 자리와 yy번째 자리에 앉은 참가자의 나이를 bitwise AND 또는 bitwise OR 했을 때 나와야 하는 값이 적혀 있다.

그런데 SUAPC 2021 Winter에 이어 이번 대회에도 후원사로 참여한 카카오가 몇 개의 자리를 골라 각 자리에 특정 나이의 참가자를 앉혀 달라고 부탁해 왔다. 연두는 후원사의 부탁을 거절하고 싶지 않아서, 나머지 빈자리에 적절한 나이의 참가자를 배치해 자신의 모든 데이터를 만족시킬 수 있을지 궁금해졌다. 연두는 이미 88세 이상 1919세 이하의 학생을 많이 확보해 두었다. 대회 준비로 바쁜 연두를 대신해 자리를 배치해 주자.

입력

입력은 다음과 같은 형식으로 주어진다.

NN

a1,a2,…,aNa_1, a_2, \dots, a_N

MM

t1 x1 y1 z1t_1\ x_1\ y_1\ z_1

…\dots

tM xM yM zMt_M\ x_M\ y_M\ z_M

출력

빈자리에 88세 이상 1919세 이하의 참가자를 배치해 연두의 모든 데이터를 만족시킬 수 있다면, 첫 번째 줄에 11을 출력한다. 다음 줄에는 11번째, 22번째, …\dots, NN번째 자리에 앉을 참가자의 나이를 공백으로 구분해 출력한다. 그런 배치가 여러 가지라면 그중 아무거나 하나를 출력한다.

그런 배치가 없다면 첫 번째 줄에 00을 출력한다.

제한

  • NN은 자리의 개수이다. (2≤N≤500002 \le N \le 50000)

  • ai=0a_i = 0 또는 8≤ai≤198 \le a_i \le 19

    • ai=0a_i = 0이면 ii번째 자리는 빈자리다.
    • 8≤ai≤198 \le a_i \le 19이면 ii번째 자리에 앉을 참가자의 나이가 aia_i다.
  • MM은 연두의 데이터의 개수다. (1≤M≤1000001 \le M \le 100000)

  • tit_i는 & 또는 |이다.

    • tit_i가 &이면 xix_i번째 자리에 앉은 참가자의 나이와 yiy_i번째 자리에 앉은 참가자의 나이의 bitwise AND가 ziz_i여야 한다.
    • tit_i가 |이면 xix_i번째 자리에 앉은 참가자의 나이와 yiy_i번째 자리에 앉은 참가자의 나이의 bitwise OR이 ziz_i여야 한다.
  • 1≤xi,yi≤N1 \le x_i, y_i \le N, xi≠yix_i \ne y_i

  • 0≤zi≤310 \le z_i \le 31

  • 입력으로 주어지는 모든 수는 정수다.

예제2

  1. 예제 1

    입력
    4
    15 0 0 0
    3
    & 1 2 1
    & 1 3 12
    | 3 4 31
    
    예상 출력
    1
    15 17 12 19
    
  2. 예제 2

    입력
    3
    0 0 0
    3
    | 1 2 24
    | 2 3 24
    | 3 1 24
    
    예상 출력
    0