Problemas
대문자 A부터 순서대로 N(N≤26)개의 문자를 가지고 하나의 문자열을 만들고자 한다.
처음에는 1개의 문자로 만들 수 있는 문자열을 사전순으로 나열하고,
2개의 문자로 만들 수 있는 문자열을 순서대로 나열하고, 3개, 4개, ... 순으로 만들 수 있는 문자열을 나열해보자.
만약 N이 3일 경우 다음과 같은 문자열이 만들어진다.
ABCAAABACBABBBCCACBCCAAAAABAACABAABBABC...
이러한 특성을 가지고 머리가 좋은 근우는 다음과 같은 암호를 만들었다.
사용할 문자의 개수 N과 그리고 암호를 위한 원문의 길이 Q를 정하고,
이를 통해 위와 같이 문자열을 만들었을 때,
원문과 일치하는 문자를 생성된 문자열에서 아무위치에서 선택하고,
원문의 문자 대신 선택된 위치로 변환 시켜서 암호화를 시킨다.
가령 'BAC'라는 원문을 암호화를 시킨다고 할 경우, 2번째, 1번째, 3번째 문자와 일치하기 때문에 2 1 3으로 암호화가 가능하다.
이것을 본 한컴의 학생들은 처음에 이 암호기법을 깨기 힘들 것 이라고 생각했으나.
다방면으로 연구를 한 결과, 이 암호기법을 깨는 것 이 마냥 불가능하지 않다는 것을 알게 되었다.
이 암호 기법을 깨는 방법을 연구해보자.
Entrada
첫 번째 줄에는 N(1≤N≤26)과 Q(0≤Q≤1,000)가 공백을 사이에 두고 주어진다.
그 다음 줄에는 Q개의 문자열의 위치가 주어지는데, 문자열의 위치는 100,000,000이하의 위치를 가리킨다.
Salida
입력된 암호문에 대한 원문을 복호화 시킨 결과를 빈칸 없이 한 줄에 문자열이 입력된 순서대로 출력한다.
Ejemplo #1
3 3
3 1 2
CAB
Ejemplo #2
10 3
3 6 10
CFJ