열쇠
시간 제한1초메모리 제한128 MB
열쇠고리에 달린 열쇠들을 고리끼리 연결한 상태에서, 두 사람이 각각 연결된 한 덩어리가 되도록 나누는 최소 열쇠 조작 횟수와 그다음 최소 고리 조작 횟수를 구한다.
문제
숭이는 자신이 가진 열쇠 더미의 절반을 혜빈이에게 주려고 한다. 열쇠는 나선을 따라 밀어 넣어 열쇠고리에 끼우거나 빼낼 수 있고, 열쇠고리끼리도 같은 방식으로 서로 연결하거나 분리할 수 있다.
열쇠 하나를 고리에 끼우거나 빼는 것도, 고리 하나를 다른 고리에 연결하거나 분리하는 것도 각각 한 번의 작업으로 센다. 그런데 열쇠를 밀어 넣는 작업은 고리를 연결하거나 분리하는 작업보다 훨씬 힘들다(혜빈이가 손톱에 네일아트를 해 주기 때문에 손톱을 다치면 안 된다). 그래서 숭이는 먼저 열쇠를 끼우거나 빼는 작업의 횟수를 최소로 하고, 그 횟수가 같은 방법이 여러 가지라면 그중에서 고리를 연결하거나 분리하는 작업의 횟수를 최소로 하려고 한다.
모든 작업이 끝나면 열쇠 더미는 정확히 두 덩이, 즉 숭이가 가질 덩이와 혜빈이에게 줄 덩이로 나뉘어야 한다. 대문자 A부터 M까지의 열쇠는 숭이가 갖고, N부터 Z까지의 열쇠는 혜빈이가 갖는다. 각 덩이는 하나로 연결되어 있어야 하며, 모든 열쇠는 반드시 어떤 고리 하나에 끼워져 있어야 한다. 두 사람 중 한쪽에게 줄 열쇠가 하나도 없다면 굳이 두 덩이로 나눌 필요는 없다. 작업 도중 열쇠가 하나도 없는 빈 고리가 남을 수 있는데, 이런 고리는 두 덩이 어느 쪽에도 속하지 않도록 따로 떼어 둔다.
예를 들어 네 개의 열쇠가 세 개의 고리에 끼워진 상태에서 숭이가 혜빈이에게 열쇠 N과 R을 주려고 한다면, 열쇠 작업 두 번과 고리 작업 한 번으로 두 덩이로 나눌 수 있다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄에 두 문자가 적힌 여러 줄과, 마지막에 0만 적힌 한 줄로 끝난다. 소문자는 열쇠고리를, 대문자는 열쇠를 나타낸다. 한 줄의 두 문자는 열쇠가 고리에 끼워진 상태(열쇠, 고리)이거나 고리끼리 연결된 상태(고리, 고리)를 뜻한다. 입력은 파일의 끝에서 끝난다.
두 문자가 모두 대문자인 경우는 없다. 한 테스트 케이스 안에서 같은 쌍은 두 번 주어지지 않는다. 각 열쇠는 정확히 하나의 고리에만 끼워져 있으며, 처음 주어지는 상태에서는 모든 고리에 열쇠가 적어도 하나 끼워져 있다(작업을 하다 보면 열쇠 없는 고리가 생길 수는 있다). 등장하는 모든 열쇠와 고리는 입력에 적어도 한 번씩 나타난다.
출력
각 테스트 케이스마다 Case x: a b 형식으로 한 줄에 출력한다. 여기서 x는 1부터 시작하는 테스트 케이스 번호, a는 열쇠를 끼우거나 빼는 작업의 최소 횟수, b는 고리를 연결하거나 분리하는 작업의 최소 횟수이다. 필요한 두 덩이로 나누는 것이 불가능하면 대신 Case x: impossible을 출력한다.