만드는 중입니다

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

의자 춤

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

요약
n개의 의자에 앉은 플레이어가 +x 또는 *x(mod n) 명령에 따라 이동합니다. 같은 의자로 갈 때는 시계 방향으로 덜 이동한 플레이어가 앉고, 질의마다 그 의자의 플레이어 번호를 구합니다.
난이도

어려움10점 중 8점

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

문제

deterministic 버전의 Musical Chairs1에서는 원형으로 놓인 nn개의 의자가 있다. 의자는 시계 방향으로 1부터 nn까지 번호가 매겨져 있다. 처음에 ii번째 플레이어는 ii번째 의자에 앉아 있다. 게임 중 게임 마스터는 모든 플레이어에게 동시에 명령을 내린다.

첫 번째 유형의 명령은 각 플레이어를 시계 방향으로 xx칸 더 이동시킨다. 즉 플레이어는 의자 ii에서 의자 i+xi+x로 이동한다.

두 번째 유형의 명령은 각 플레이어를 의자 ii에서 의자 i⋅xi\cdot x로 이동시킨다. 두 계산 모두 nn을 법으로 하며, 나머지가 0이면 의자 nn에 해당한다.

두 명 이상의 플레이어가 같은 의자로 가려 하면, 시계 방향으로 가장 적게 이동해야 하는 플레이어가 그 자리를 차지한다. 그 의자를 노리던 나머지 플레이어는 게임에서 탈락한다. 그림 C.1은 명령 * 10의 경우를 보여 준다.

그림 C.1: 샘플 입력 1의 네 번째 명령 시점이다. 플레이어 4와 10이 모두 의자 2로 가려 한다. 시계 방향으로 덜 이동하는 플레이어 10이 그 자리를 차지한다.


1원래 게임을 알 필요는 없지만, 대회가 끝난 뒤에 직접 해 볼 수 있다.

입력

첫 줄에 두 정수 nn과 qq (2≤n,q≤5⋅1052\leq n,q\leq5\cdot10^5)가 주어진다. 각각 의자의 수와 명령의 수이다.

이어지는 qq개의 줄에는 다음 세 가지 명령 중 하나가 주어진다.

  • + x: 의자 ii에 있는 플레이어가 의자 i+xi+x로 이동한다.
  • * x: 의자 ii에 있는 플레이어가 의자 i⋅xi\cdot x로 이동한다.
  • ? x: 의자 xx에 있는 플레이어의 번호를 알려 준다.

모든 xx는 1≤x≤n1 \leq x \leq n을 만족한다.

출력

? 명령마다 요청된 의자에 있는 플레이어의 번호를 출력한다. 의자가 비어 있으면 −1-1을 출력한다.

예제2

  1. 예제 1

    입력
    12 10
    ? 12
    + 1
    ? 12
    * 10
    ? 2
    * 5
    ? 2
    * 6
    ? 1
    ? 12
    
    예상 출력
    12
    11
    10
    6
    -1
    11
    
  2. 예제 2

    입력
    32 11
    * 6
    ? 8
    * 6
    + 31
    * 28
    ? 4
    + 1
    * 2
    + 1
    * 3
    ? 1
    
    예상 출력
    28
    32
    32