일반 단위 변환

시간 제한1초메모리 제한128 MB

문제

길이, 무게, 넓이, 시간처럼 하나의 공통된 물리량을 나타내는 서로 다른 두 측정 체계의 정의와, 두 체계 사이를 잇는 변환 규칙, 그리고 첫 번째 체계로 표현된 수량을 입력받아, 같은 수량을 두 번째 체계로 나타내는 프로그램을 작성하라.

입력

입력은 하나 이상의 문제 묶음으로 이루어진다. 각 문제 묶음은 두 측정 체계, 두 체계를 잇는 변환 규칙 하나, 그리고 변환할 수량들의 목록을 담는다.

한 문제 묶음의 구조는 다음과 같다.

  1. 첫 번째 체계의 단위 이름을 큰 단위부터 작은 단위 순서로, 하나의 공백으로 구분하여 한 줄에 적는다. 이 줄의 길이는 최대 80자이다. 각 단위 이름은 알파벳 문자로만 이루어지며, 한 줄 안에서 같은 이름이 반복되지 않는다.
  2. 첫 번째 체계의 단위가 $N$개라면, 이어지는 $N-1$개의 줄에 내부 변환 규칙이 a unit1 = b unit2 형태로 주어진다. 여기서 $a$와 $b$는 양수(정수 또는 소수)이고 unit1, unit2는 첫 번째 체계의 단위이다. 이 $N-1$개의 규칙은 언제나 체계 안의 임의의 두 단위를 서로 변환하기에 충분한 정보를 제공한다.
  3. 곧이어 같은 형식으로 두 번째 체계의 정의(단위 줄과 그 $N-1$개의 내부 규칙)가 주어진다.
  4. a unit1 = b unit2 형태의 변환 규칙 한 줄이 주어진다. 이때 unit1은 첫 번째 체계의 단위, unit2는 두 번째 체계의 단위이다.
  5. 이어서 하나 이상의 수량 줄이 나온다. 하나의 수량은 (수, 단위) 쌍 하나 이상으로 표현되며, 한 수량 안에서 단위는 큰 것부터 작은 순서로 나타난다. 체계의 모든 단위가 반드시 등장하지는 않는다. 모든 수는 음이 아니다.

완전히 빈 줄 하나가 수량 목록과 그 문제 묶음의 끝을 나타낸다. 그 빈 줄 다음 줄이 비어 있지 않으면 새로운 문제 묶음이 시작되고, 그 줄도 비어 있으면 입력이 끝난다.

모든 값은 출력의 각 수가 일반적인(32비트) 정수 범위에 들어가도록 제한된다.

출력

각 수량마다 두 번째 체계로 환산한 결과를 한 줄에 출력한다. 두 번째 체계의 모든 단위를 큰 것부터 작은 순서로, 값이 0인 단위까지 빠짐없이 나열한다. 큰 단위가 값을 최대한 많이 차지하도록 각 개수를 정한다(그리디). 모든 개수는 정수이며, 가장 작은 단위의 개수는 가장 가까운 정수로 반올림한다(정확히 중간값이면 올림한다). 각 수와 단위 이름은 하나의 공백으로 구분한다.