시간 제한
메모리 제한
시간 제한
1초
메모리 제한
128 MB
상덕이는 최근 행운의 바퀴를 샀다. 바퀴의 각 칸에는 서로 다른 알파벳 대문자가 하나씩 적혀 있다.

바퀴에는 같은 글자가 두 번 이상 등장하지 않는다. 바퀴는 시계 방향으로만 돌아가며, 바퀴 옆의 화살표는 항상 한 위치를 가리킨다. 바퀴가 돌아가면 화살표가 가리키는 글자만 바뀐다. 위 그림에서는 화살표가 H를 가리키고 있다.
상덕이는 바퀴를 연속해서 K번 돌린다. 매번 바퀴를 돌릴 때마다, 화살표가 가리키는 글자가 몇 번 바뀌었는지와 회전을 멈췄을 때 화살표가 가리킨 글자를 종이에 적었다.
희원이는 그 기록을 보고 바퀴에 적힌 알파벳 배치를 알아내려고 한다.
바퀴의 칸 수와 상덕이의 기록이 주어질 때, 가능한 바퀴의 알파벳 배치를 구하는 프로그램을 작성하시오.
첫째 줄에 바퀴의 칸 수 N과 상덕이가 바퀴를 돌린 횟수 K가 주어진다. (2 ≤ N ≤ 25, 1 ≤ K ≤ 100)
다음 K개의 줄에는 각 회전에서 화살표가 가리키는 글자가 몇 번 바뀌었는지를 나타내는 정수 S와, 회전이 끝난 뒤 화살표가 가리킨 알파벳 대문자가 주어진다. (1 ≤ S ≤ 100)
마지막 회전이 끝난 뒤 화살표가 가리키는 문자부터 시작해, 시계 방향으로 바퀴에 적힌 알파벳을 한 줄에 출력한다. 아직 어떤 글자인지 결정할 수 없는 칸은 ?로 출력한다.
주어진 기록과 일치하는 행운의 바퀴가 존재하지 않으면 !를 출력한다.