一는 零, 零는 一
시간 제한8초메모리 제한1024 MB
집합 S에서 문자열을 골라 이어 붙인 뒤 인접한 문자를 바꿔 이진 문자열 t를 만듭니다. 교환 횟수가 가장 적고 사전순으로 앞선 결과를 구합니다.
문제
당신은 '이진의 연금술사'라는 이름을 얻은 유명한 연금술사다. 그 별명이 뜻하는 대로, 요청에 따라 '0'과 '1'로 이루어진 이진 문자열을 마음대로 만들어 내는 것이 당신의 특기다. 다만 연금술의 기본은 등가 교환이라서, 무에서 유를 만들 수는 없다. 그래서 당신은 다음 절차에 따라 이진 문자열을 만든다.
- 재료가 될 이진 문자열 몇 개를 문자열 집합 에 미리 저장해 둔다.
- 빈 문자열에서 시작한다. 에서 임의의 문자열을 하나 골라 끝에 이어 붙이는 과정을 임의의 횟수만큼 반복한다. 같은 문자열을 여러 번 골라도 된다.
- 이어 붙인 문자열에서 인접한 두 문자를 서로 바꾸는 과정을 임의의 횟수만큼 반복한다.
당신은 이진 문자열 와 이진 문자열 집합 가 주어졌을 때, 를 재료로 삼아 위 절차에 따라 를 만들고자 한다. 를 만드는 절차가 여러 가지라면, 3번 단계의 교환 횟수가 적을수록 좋다. 교환 횟수도 같은 절차가 여럿이라면, 2번 단계가 끝난 시점의 문자열 중 사전순으로 가장 작은 것을 고르는 편이 낫다. 연성진을 더 간결하게 만들 수 있기 때문이다.
당신은 가능한 한 즉시 술법을 펼칠 수 있도록, 2번 단계가 끝난 시점에서 최적의 문자열을 자동으로 구하는 보조 프로그램을 만들기로 했다. 어떤 절차를 쓰더라도 가진 로 를 만들 수 없는 경우도 있다. 그럴 때는 "IMPOSSIBLE"을 출력한다.
입력
입력은 여러 개의 데이터셋으로 이루어진다.
각 데이터셋은 정수 이 적힌 한 줄로 시작한다. 이는 문자열 집합 에 들어 있는 문자열이 개임을 뜻하며, 을 만족한다. 이어지는 개의 줄 중 번째 줄은 에 속한 번째 이진 문자열 를 나타낸다. 는 '0'과 '1'만으로 이루어지며, 길이 는 을 만족한다. 모든 에 대해 가 보장된다. 그다음 줄에는 만들고자 하는 문자열 가 주어진다. 는 '0'과 '1'만으로 이루어지며, 길이 는 을 만족한다.
입력의 끝은 0 한 줄로 표시된다. 전체 데이터셋의 수는 100을 넘지 않는다.
출력
를 만드는 절차에서 2번 단계가 끝난 시점에 만들 수 있는 문자열을 한 줄에 출력한다. 그런 문자열이 여럿이면, 3번 단계에서 인접한 두 문자를 교환한 횟수가 가장 적은 것을 출력한다. 그래도 여럿이면 사전순으로 가장 작은 것을 출력한다. 그런 문자열이 하나도 없으면 "IMPOSSIBLE"을 출력한다.