논리 퍼즐
시간 제한1초메모리 제한512 MB
변수 이름이 적힌 격자와 각 행과 열의 합이 주어질 때, 미지수가 하나뿐인 행이나 열을 반복해서 풀어 모든 변수의 정수 값을 구한다.
문제
퍼즐 잡지에 흔히 나오는 논리 퍼즐이 있다. 격자의 각 칸에는 변수 이름이 하나씩 적혀 있고, 격자 오른쪽과 아래쪽에 적힌 수는 각각 그 행과 그 열에 있는 변수 값의 합이다.

행과 열의 합을 모두 만족하도록 각 변수의 값을 정하는 것이 이 퍼즐의 목표다. 아이들이 풀도록 만든 퍼즐이라 푸는 데 도움이 되는 성질이 하나 있다. 값이 아직 밝혀지지 않은 변수가 정확히 하나만 남은 행이나 열이 항상 있다. 그래서 한 단계마다 변수 하나의 값을 확정하는 방식으로 퍼즐을 끝까지 풀 수 있다.
퍼즐이 주어지면 각 변수의 값을 구하라.
입력
첫째 줄에 퍼즐의 행 수 과 열 수 가 주어진다 (, ). 이어지는 개 줄에는 각 줄마다 변수 이름 개와 정수 가 주어진다. 는 그 행에 있는 변수 값의 합이다 (). 마지막 줄에는 정수 개가 주어지고, 번째 정수 는 번째 열에 있는 변수 값의 합이다 ().
변수 이름은 'a'부터 'z'까지의 소문자 두 개로 이루어진다. 같은 변수 이름이 여러 칸에 나올 수 있고, 그 값은 나온 횟수만큼 합에 더해진다. 모든 퍼즐은 해가 유일하며, 모든 변수 값은 이상 이하의 정수다.
출력
퍼즐에 나오는 변수마다 한 줄씩 출력한다. 각 줄에는 변수 이름과 그 정수 값을 공백으로 구분해 적는다. 변수는 알파벳 순서, 즉 aa, ab, ..., az, ba, bb, ..., za, zb, ..., zz 순서로 출력한다.