아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

인터넷 뱅킹

시간 제한2초메모리 제한1024 MB

요약
길이가 같은 n개의 문자열이 주어질 때, 두 문자열의 같은 위치 문자를 교환하는 연산으로 어떤 문자열을 목표 암호와 같게 만드는 최소 연산 수와 그 연산들을 구한다.
난이도

보통10점 중 6점

유형
그리디, 구현, 시뮬레이션, 해시맵
정답자
아직 제출이 없습니다

문제

인터넷 뱅킹은 은행 고객이 세계 어디서든 인터넷을 통해 자신의 계좌 정보에 접근할 수 있게 해 주는 기술이다. 인터넷 뱅킹을 쓸 때는 보안 문제가 중요하므로, 사용자는 시스템에 접근하려면 비밀번호를 입력해야 한다.

어느 아주 큰 은행이 사용하는 인터넷 뱅킹 시스템 Bank 2.0은 다음과 같은 방식으로 비밀번호를 입력받는다. 시스템의 서버는 nn개의 문자열 s1,…,sns_1, \ldots, s_n을 무작위로 만든다. 각 문자열은 라틴 알파벳 소문자 mm개로 이루어진다(비밀번호도 이런 문자로만 이루어진다고 가정한다).

비밀번호를 입력할 때 사용자는 다음 연산을 할 수 있다. 주어진 문자열에서 두 개를 고르고(각각 sis_i, sjs_j라 하자. 1≤i,j≤n1 \le i, j \le n, i≠ji \ne j) 그 안의 위치 kk(1≤k≤m1 \le k \le m)를 하나 고른 다음, sis_i와 sjs_j의 kk번째 문자를 서로 바꾼다. 예를 들어 si=s_i=<<abcde>>, sj=s_j=<<vwxyz>>, k=3k=3이면 이 연산을 수행한 뒤 si=s_i=<<abxde>>, sj=s_j=<<vwcyz>>가 된다. 비밀번호를 입력하려면 이런 연산을 최소 횟수만 써서 s1,…,sns_1, \ldots, s_n 가운데 적어도 하나가 pp와 같아지도록 만들어야 한다.

주어진 문자열 s1,…,sns_1, \ldots, s_n과 사용자의 비밀번호 pp에 대해, 비밀번호를 입력하는 데 필요한 최소 연산 횟수와 그 횟수만큼 연산을 수행해 비밀번호를 입력하는 방법을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 nn이 주어진다(2≤n≤1002 \le n \le 100). 이어지는 nn개의 줄에 문자열 s1,…,sns_1, \ldots, s_n이 하나씩 주어진다. 모든 문자열은 라틴 알파벳 소문자로만 이루어져 있고 길이가 mm으로 같다(2≤m≤1002 \le m \le 100).

마지막 줄에 사용자의 비밀번호 pp가 주어진다. 길이는 mm이고 라틴 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 비밀번호를 입력하는 데 필요한 최소 연산 횟수 cc를 출력한다. 문제에 나온 연산으로 비밀번호를 입력할 수 없으면 첫째 줄에 <<−1-1>>을 출력한다.

해가 존재하면 이어지는 cc개의 줄에 연산의 설명을 출력한다. 연산은 적용하는 순서대로 나열해야 하며, 각 줄에는 세 정수 ii, jj, kk를 출력한다(1≤i,j≤n1 \le i, j \le n, i≠ji \ne j, 1≤k≤m1 \le k \le m). 이 수들은 해당 연산이 문자열 sis_i와 sjs_j의 kk번째 문자를 맞바꾼다는 뜻이다.

예제2

  1. 예제 1

    입력
    3
    abc
    cab
    bca
    acb
    
    예상 출력
    2
    1 3 2
    1 2 3
    
  2. 예제 2

    입력
    3
    abc
    cab
    bca
    acd
    
    예상 출력
    -1