섞인 출력
시간 제한3초메모리 제한1024 MB
S가 같은 문자열 N개를 섞어 만든 결과일 때, 원래 문자열이 될 수 있는 것을 모두 사전순으로 출력합니다.
문제
유쿠는 여러 가지 명령줄 프로그램을 실험했다. 대부분의 프로그램은 같은 프로그램을 여러 번 연속으로 실행하면 매번 같은 출력을 냈다. 예를 들어 pwd 프로그램을 두 번 연속 실행하면 다음과 같이 출력된다.
/home/juku/lahendused/segane
/home/juku/lahendused/segane
하지만 같은 프로그램을 여러 개 동시에 실행하면 출력이 서로 섞인다. 유쿠가 pwd 두 개를 동시에 실행했을 때는 실행할 때마다 다른 결과가 나왔다.
/home//homjukue/ju/lahkeundu/sedl/ahseeganen
dused/segane
/h/ohomme/e/juku/lajukhue/landusehedn/segadunseed/
segane
서로 다른 실행 인스턴스의 문자는 섞일 수 있지만, 각 인스턴스의 출력은 전부 빠짐없이 나오며 한 인스턴스가 낸 문자들은 원래 순서를 유지한다. 유쿠는 이 현상을 더 실험하려 했지만, 일부 프로그램의 출력은 알 수 없었다. 이제 주어진 정보로 가능한 출력을 모두 복원하려 한다.
입력
입력은 여러 개의 테스트케이스로 구성될 수 있다. 첫 줄에 테스트케이스의 개수 ()가 주어진다.
각 테스트케이스는 두 줄로 이루어진다. 첫 줄에는 동시에 실행한 프로그램의 개수 ()이 주어진다. 둘째 줄에는 같은 프로그램의 개 인스턴스를 동시에 실행했을 때 얻은 출력 문자열 가 주어진다. 는 영어 소문자로만 이루어지며, 공백, 줄바꿈, 그 밖의 특수 문자는 없다.
한 인스턴스의 출력 길이를 이라 하면 의 길이는 이다. 각 테스트케이스에서 이 보장된다. 아래 표는 별 최대 값이다.
출력
각 테스트케이스마다 두 줄을 출력한다. 첫 줄에는 가능한 출력의 개수를 출력한다. 둘째 줄에는 가능한 출력을 모두 공백으로 구분하여 사전순으로 출력한다.
테스트케이스에 따라 가능한 출력이 하나뿐인 경우도 있고, 여러 개인 경우도 있다.