인터넷 뱅킹
시간 제한2초메모리 제한1024 MB
길이가 같은 n개의 문자열이 주어질 때, 두 문자열의 같은 위치 문자를 교환하는 연산으로 어떤 문자열을 목표 암호와 같게 만드는 최소 연산 수와 그 연산들을 구한다.
문제
인터넷 뱅킹은 은행 고객이 세계 어디서든 인터넷을 통해 자신의 계좌 정보에 접근할 수 있게 해 주는 기술이다. 인터넷 뱅킹을 쓸 때는 보안 문제가 중요하므로, 사용자는 시스템에 접근하려면 비밀번호를 입력해야 한다.
어느 아주 큰 은행이 사용하는 인터넷 뱅킹 시스템 Bank 2.0은 다음과 같은 방식으로 비밀번호를 입력받는다. 시스템의 서버는 개의 문자열 을 무작위로 만든다. 각 문자열은 라틴 알파벳 소문자 개로 이루어진다(비밀번호도 이런 문자로만 이루어진다고 가정한다).
비밀번호를 입력할 때 사용자는 다음 연산을 할 수 있다. 주어진 문자열에서 두 개를 고르고(각각 , 라 하자. , ) 그 안의 위치 ()를 하나 고른 다음, 와 의 번째 문자를 서로 바꾼다. 예를 들어 <<abcde>>, <<vwxyz>>, 이면 이 연산을 수행한 뒤 <<abxde>>, <<vwcyz>>가 된다. 비밀번호를 입력하려면 이런 연산을 최소 횟수만 써서 가운데 적어도 하나가 와 같아지도록 만들어야 한다.
주어진 문자열 과 사용자의 비밀번호 에 대해, 비밀번호를 입력하는 데 필요한 최소 연산 횟수와 그 횟수만큼 연산을 수행해 비밀번호를 입력하는 방법을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 이 주어진다(). 이어지는 개의 줄에 문자열 이 하나씩 주어진다. 모든 문자열은 라틴 알파벳 소문자로만 이루어져 있고 길이가 으로 같다().
마지막 줄에 사용자의 비밀번호 가 주어진다. 길이는 이고 라틴 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 비밀번호를 입력하는 데 필요한 최소 연산 횟수 를 출력한다. 문제에 나온 연산으로 비밀번호를 입력할 수 없으면 첫째 줄에 <<>>을 출력한다.
해가 존재하면 이어지는 개의 줄에 연산의 설명을 출력한다. 연산은 적용하는 순서대로 나열해야 하며, 각 줄에는 세 정수 , , 를 출력한다(, , ). 이 수들은 해당 연산이 문자열 와 의 번째 문자를 맞바꾼다는 뜻이다.