지갑을 가볍게
시간 제한8초메모리 제한512 MB
지갑에 있는 동전의 개수와 지불할 금액이 주어질 때, 거스름돈을 받은 뒤 남는 동전 수가 최소가 되도록 지불할 동전을 정한다.
문제
Mr. Bill은 가게에서 쇼핑을 하고 있다. 그의 지갑에는 동전(10엔, 50엔, 100엔, 500엔)이 몇 개 들어 있는데, 그는 지금 이 동전을 최대한 많이 소비하려고 한다. 즉, 적절한 개수의 동전으로 물건값을 지불한 뒤 거스름돈을 받고 나서 지갑에 남은 동전의 총 개수를 최소로 만들려고 한다.
다행히도 이 가게의 점원은 매우 꼼꼼하고 친절해서, 거스름돈은 항상 최적의 방법으로 돌려준다. 따라서 예를 들어 500엔짜리 동전 1개 대신 100엔짜리 동전 5개를 돌려주는 일은 없다. 또한 예를 들어 10엔짜리 동전 5개를 내고 50엔짜리 동전을 거스름돈으로 받을 수도 있다. 다만, 낸 동전과 같은 종류의 동전이 거스름돈으로 돌아오는 방식으로 지불해서는 안 된다. 예를 들어 10엔짜리 동전을 지불할 때 냈는데도 다른 10엔짜리 동전이 거스름돈으로 돌아온다면, 완전히 의미 없는 거래가 발생하기 때문이다.
그런데 Mr. Bill은 계산을 잘 못해서 실제로 동전을 몇 개 사용해야 하는지 스스로 구할 수 없었다. 그래서 그는 당신에게 도움을 청했다. 당신의 일은 그의 지갑에 있는 동전의 개수와 지불 금액을 바탕으로, 사용해야 할 동전의 종류와 개수를 구하는 프로그램을 작성하는 것이다. 점원은 거스름돈에 지폐를 사용하지 않는다.
입력
입력에는 여러 개의 테스트 케이스가 들어 있다.
각 테스트 케이스는 2줄로 이루어진다. 첫째 줄에는 Mr. Bill의 지불 금액을 엔 단위로 나타낸 정수 하나가 들어 있다. 둘째 줄에는 정수 4개가 들어 있으며, 이는 순서대로 지갑에 있는 10엔, 50엔, 100엔, 500엔짜리 동전의 개수를 나타낸다.
지불 금액은 항상 10엔 단위이다. 즉, 지불 금액의 1엔 자리는 항상 0이다. 또한 지갑에는 같은 종류의 동전이 최대 20개까지만 있다고 가정해도 된다. 지불이 불가능한 경우는 입력에 주어지지 않는다.
입력의 끝은 0 하나를 포함하는 줄로 나타낸다.
출력
각 테스트 케이스에 대해 Mr. Bill이 사용해야 할 동전의 종류와 개수를 출력한다.
출력의 각 줄에는 정수 ci, ki 두 개가 들어 있다. 이는 지불할 때 ci엔짜리 동전을 ki개 사용한다는 뜻이다. 여러 종류의 동전을 사용하는 경우에는 ci가 작은 것부터 순서대로 필요한 만큼 줄을 출력한다. 아래 출력 예를 참고한다.
출력에는 불필요한 공백을 넣어서는 안 된다. 연속하는 테스트 케이스 사이는 빈 줄로 구분한다.