지난달에 수표 몇 장이 부도나자, 이제는 재정을 제대로 관리해야겠다고 마음먹었습니다. 은행이 월별 명세서를 온라인으로 제공하기 시작했으니, 이 명세서를 직접 작성한 수표 장부와 대조하여 앞으로 발행하는 수표를 감당할 만큼의 잔액을 늘 확보하려고 합니다.
은행 월별 명세서에는 시작 잔액, 모든 거래 내역, 최종 잔액이 적혀 있습니다. 여러분이 할 일은 같은 기간 동안 장부에 기록한 거래와 이 명세서를 비교하는 것입니다. 각 장부 항목에 대해, 명세서에만 있거나 장부에만 있는 거래, 장부에 잘못 적은 금액(은행 명세서는 항상 옳습니다), 그리고 장부의 잔액 계산 실수를 찾아내야 합니다.
은행 명세서가 먼저 주어집니다. 명세서는 다음 형식의 줄로 시작하고 끝납니다.
balance <X>
첫 번째 줄은 시작 잔액, 두 번째 줄은 최종 잔액을 나타냅니다. 두 잔액 줄 사이에는 거래가 한 줄에 하나씩 나열됩니다.
{check|deposit} <N> <X>
N은 수표 또는 입금 번호(정수)이고 X는 금액입니다. 같은 번호는 수표로 최대 한 번, 입금으로 최대 한 번만 나타나므로, 같은 번호가 수표와 입금 모두에 쓰일 수 있습니다.
최종 잔액 줄 다음에는 장부가 이어집니다. 장부의 첫 줄은 장부의 시작 잔액입니다.
<X>
그 뒤로는 두 줄씩 짝을 이룹니다. 먼저 거래 한 줄, 그다음 그 거래를 기록한 뒤 직접 계산한 잔액 한 줄입니다.
{check|deposit} <N> <X>
<X>
이 짝은 입력이 끝날 때까지 반복됩니다. 모든 금액과 중간값은 $|X| < 1000000$을 만족하며, 모든 금액은 센트 단위($0.01$의 배수)로 주어집니다. check는 잔액을 줄이고 deposit은 잔액을 늘립니다.
장부 항목을 순서대로 읽으며 각 항목마다 정확히 한 줄을 출력합니다.
어떤 장부 항목이 명세서에 같은 금액으로 존재하고, 잔액 계산이 맞으며, 장부에서 이전에 나온 거래의 중복이 아니라면 그 항목은 완전히 올바른 것입니다. 이 경우 다음을 출력합니다.
{check|deposit} <N> is correct
그렇지 않으면 거래 종류와 번호로 시작하는 한 줄을 출력하고, 그 뒤에 아래 메시지 중 하나 이상을 정확히 다음 순서로 공백 하나로 구분하여 이어 붙입니다.
is not in statement — 이 거래 종류와 번호가 명세서에 없습니다.repeated transaction — 이 거래가 장부에서 이미 앞서 나왔습니다.incorrect amount — 장부의 금액이 명세서의 금액과 다릅니다.math uses correct value — 장부에 금액을 잘못 적었지만 잔액은 명세서의 금액으로 계산되었습니다. 이 메시지는 incorrect amount와 함께일 때만 나타날 수 있습니다.math mistake — 이 거래 뒤의 잔액이 명세서 금액으로 계산한 값과도, 장부에 적힌 금액으로 계산한 값과도 일치하지 않습니다.마지막 장부 항목에 대한 줄을 출력한 뒤에는, 장부에 한 번도 나오지 않은 명세서 거래를 명세서에 나온 순서대로 한 줄에 하나씩 출력합니다.
missed {check|deposit} <N>