만드는 중입니다

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

빙글빙글 물대포

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

요약
원형으로 놓인 N개의 대포가 각자 정해진 주기로 물대포를 쏠 때, 끝까지 살아남는 것이 보장되는 모든 자리를 구합니다.
난이도

보통10점 중 7점

유형
시뮬레이션, 기하, 수학
정답자
아직 제출이 없습니다

문제

서울대학교 워터밤에 오신 여러분, 환영합니다!

이번 축제에서는 NN명이 함께 즐길 수 있는 게임을 준비했습니다. "빙글빙글 물대포" 게임은 원 모양 행사장의 테두리 위에 같은 간격으로 놓인 NN개의 물대포로 진행됩니다. 물대포에는 1번부터 NN번까지 번호가 붙어 있고, 시계 방향으로 1번, 2번, ..., NN번 물대포가 놓여 있습니다. 모든 물대포는 바닥에 고정되어 움직이지 않습니다.

각 물대포는 2N2N초에 한 바퀴씩 일정한 속도로 시계 방향으로 멈추지 않고 회전합니다. 초기 시점에 각 물대포는 시계 방향으로 다음에 놓인 물대포를 향합니다. 즉 1번 물대포는 2번을, 2번 물대포는 3번을, ..., NN번 물대포는 1번을 향합니다.

ii번 물대포는 초기 시점을 포함해 TiT_i초마다 한 번씩, 향하고 있는 방향으로 물줄기를 발사합니다. 물줄기는 반직선 경로를 따라 멈추지 않고 한없이 뻗어 나갑니다.

ii (1≤i≤N1 \le i \le N)번 참가자는 ii번 물대포 위치에서 게임을 진행합니다. 물대포가 발사한 물줄기가 지나는 위치에 사람이 서 있었다면, 발사된 즉시 그 물줄기를 맞습니다. 단, 자신이 선택한 물대포에서 발사된 물줄기는 맞지 않습니다. ii번 물대포 위치의 사람은 초기 체력이 AiA_i이며, 물줄기를 한 번 맞을 때마다 체력이 정확히 1씩 줄어듭니다. 체력이 0이 된 사람은 0.5초 후 게임에서 탈락합니다. 탈락한 사람의 물대포는 탈락한 시점부터 물줄기를 발사하지 않습니다.

게임 끝까지 남은 사람에게는 큰 상품이 주어집니다. 어떤 위치를 차지해야 끝까지 남을 수 있을까요? 아무리 긴 시간 동안 게임이 계속되더라도 반드시 끝까지 남는 위치를 모두 구하세요.

입력

첫 번째 줄에 물대포의 수 NN이 주어집니다. (2≤N≤502 \le N \le 50)

두 번째 줄에 ii번 물대포 위치에 있는 사람의 초기 체력 AiA_i가 공백으로 구분되어 주어집니다. (1≤Ai≤10000000001 \le A_i \le 1000000000)

세 번째 줄에 ii번 물대포의 발사 주기 TiT_i가 공백으로 구분되어 주어집니다. (1≤Ti≤10001 \le T_i \le 1000)

모든 입력은 정수입니다.

출력

첫 번째 줄에 반드시 끝까지 남는 위치의 개수를 출력합니다.

두 번째 줄에 반드시 끝까지 남는 위치에 해당하는 물대포의 번호를 공백으로 구분해 오름차순으로 출력합니다.

예제4

  1. 예제 1

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

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

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

    입력
    4
    1 10 1 10
    2 4 2 4
    
    예상 출력
    2
    2 4