문제
N개의 서로 다른 문자들이 차례로 주어질 때,
이 문자들을 스택에 어떤 방법으로 넣고(push) 꺼내는(pop)가에 따라 다른 문자열이 얻어진다.
예를 들어 ABC 세 문자가 주어질 때, 이 문자를 스택에 넣고 꺼내는 방법을 달리한 결과
다음과 같은 문자열이 생성된다.
ABC : push(A), pop(), push(B), pop(), push(C), pop()
ACB : push(A), pop(), push(B), push(C), pop(), pop()
BAC : push(A), push(B), pop(), pop(), push(C), pop()
BCA : push(A), push(B), pop(), push(C), pop(), pop()
CBA : push(A), push(B), push(C), pop(), pop(), pop()
순열과는 다르게 CAB는 만들어지지 않는다는 점에 유의한다.
문자의 개수 N ( 1 <= N <= 26) 과 출력 방법 M ( 0 또는 1)이 주어질 때,
스택에 넣고 꺼내는 방법을 달리하여 얻을 수 있는 서로 다른 문자열을 구하는 프로그램을 작성하시오.
N이 의미하는 바는 A부터 연속된 N개의 알파벳을 사용한다는 것이다.
예를 들어, N = 3 인 경우 주어지는 문자열은 ABC 이고,
N = 6 인 경우 주어지는 문자열은 ABCDEF 이다.
M이 0인 경우 사전편집상 오름차순으로,
1인 경우 사전편집상 내림차순으로 출력한다.
입력
하나의 행에 N( 1 <= N <= 26) 과 M( 0 또는 1)이 공백을 구분하여 주어진다.
출력
첫 행에 가능한 경우의 수 result 를 출력한다.
result 가 65536 이하인 경우 두 번째 줄부터 행으로 구분하여 각 문자열을 출력한다.
예제 #1
3 0
5
ABC
ACB
BAC
BCA
CBA
예제 #2
2 1
2
BA
AB
출처
comkiwer