행운의 바퀴

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

요약
고유한 문자가 적힌 N개 슬롯의 회전판에서 회전 횟수와 도착 문자 기록을 보고 판에 적힌 문자를 복원하거나 불가능함을 판별하는 문제입니다.
난이도

보통10점 중 6점

유형
시뮬레이션, 배열, 구현
정답자
아직 제출이 없습니다

문제

상덕이는 최근 행운의 바퀴를 샀다. 바퀴의 각 칸에는 서로 다른 알파벳 대문자가 하나씩 적혀 있다.

바퀴에는 같은 글자가 두 번 이상 등장하지 않는다. 바퀴는 시계 방향으로만 돌아가며, 바퀴 옆의 화살표는 항상 한 위치를 가리킨다. 바퀴가 돌아가면 화살표가 가리키는 글자만 바뀐다. 위 그림에서는 화살표가 H를 가리키고 있다.

상덕이는 바퀴를 연속해서 K번 돌린다. 매번 바퀴를 돌릴 때마다, 화살표가 가리키는 글자가 몇 번 바뀌었는지와 회전을 멈췄을 때 화살표가 가리킨 글자를 종이에 적었다.

희원이는 그 기록을 보고 바퀴에 적힌 알파벳 배치를 알아내려고 한다.

바퀴의 칸 수와 상덕이의 기록이 주어질 때, 가능한 바퀴의 알파벳 배치를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 바퀴의 칸 수 N과 상덕이가 바퀴를 돌린 횟수 K가 주어진다. (2 ≤ N ≤ 25, 1 ≤ K ≤ 100)

다음 K개의 줄에는 각 회전에서 화살표가 가리키는 글자가 몇 번 바뀌었는지를 나타내는 정수 S와, 회전이 끝난 뒤 화살표가 가리킨 알파벳 대문자가 주어진다. (1 ≤ S ≤ 100)

출력

마지막 회전이 끝난 뒤 화살표가 가리키는 문자부터 시작해, 시계 방향으로 바퀴에 적힌 알파벳을 한 줄에 출력한다. 아직 어떤 글자인지 결정할 수 없는 칸은 ?로 출력한다.

주어진 기록과 일치하는 행운의 바퀴가 존재하지 않으면 !를 출력한다.

예제3

  1. 예제 1

    입력
    3 3
    1 A
    2 B
    3 C
    
    예상 출력
    !
    
  2. 예제 2

    입력
    5 6
    1 A
    2 B
    5 B
    1 C
    2 A
    2 B
    
    예상 출력
    B?A?C
    
  3. 예제 3

    입력
    8 8
    4 V
    3 I
    7 T
    7 A
    6 R
    5 N
    1 O
    9 H
    
    예상 출력
    HONITAVR