돌도끼 만들기

NYPC 2017 · 본선

모바일 MMORPG <야생의 땅: 듀랑고> 에서는 플레이어들이 낯선 세상에서 생존하기 위해 필요한 물건들을 자연에서 채집하거나, 직접 만들어야 한다. 예를 들어, 다음과 같은 규칙을 따라 물건을 얻을 수 있다고 하자.

이 경우 돌도끼 11개를 만드는 방법의 예를 들면 다음과 같다:

갈대 22개를 채집하고(에너지 5×2=105 \times 2 = 10 소모), 나뭇가지 11개를 채집하여(에너지 1010 소모) 나무막대 11개로 바꾸고(에너지 1010 소모), 돌 11개를 채집하고(에너지 55 소모), 이 재료들로 돌도끼 11개를 만든다(에너지 5050 소모). 총 에너지 소모량은 10+10+10+5+50=8510 + 10 + 10 + 5 + 50 = 85이다.

물건을 얻을 수 있는 규칙들이 주어질 때, 돌도끼를 만들기 위해서는 어떤 순서로 일을 해야 하는지 구하는 프로그램을 작성하라.

입력 형식

첫째 줄에 물건을 얻을 수 있는 규칙의 개수를 나타내는 자연수 NN (1N501 \le N \le 50)이 주어진다.

다음 NN줄에 걸쳐서 물건을 만드는 규칙을 나타내는 입력이 주어진다.

ii번째 줄에는, ii번째 규칙이 kk m1m_1 c1c_1 m2m_2 c2c_2 \cdots mkm_k ckc_k EE MM의 형태로 주어진다. 이는 kk(0k40 \le k \le 4)개의 재료 m1m_1, m2m_2, \cdots, mkm_k를 각각 c1c_1, c2c_2, \cdots, ckc_k (1ci101 \le c_i \le 10)개 사용하고 EE(1E1001 \le E \le 100)만큼의 에너지를 소모하면 MM11개 만들 수 있다는 의미다. k=0k = 0이면 EE만큼의 에너지를 소모하여 자연에서 직접 채집할 수 있다는 의미다.

kk, cic_i, EE는 모두 정수이다. MM 은 알파벳 소문자로 이루어진 길이 11이상 1616이하의 문자열이고, m1m_1, m2m_2, \cdots, mkm_k는 반드시 이전 줄에 주어진 MM중 하나이다. 같은 물건을 만드는 규칙이 여럿 주어질 수 있다.

주어진 MM중에는 반드시 stoneaxe가 존재하며, 이 물건이 돌도끼를 나타낸다. 돌도끼 하나를 만드는 최적의 에너지량이 101610^{16}이하인 입력만 주어진다.

출력 형식

첫째 줄에 돌도끼를 만드는 과정의 총 절차 개수 KK를 첫 줄에 출력한다. KK11이상 100100이하의 자연수여야 한다.

다음 KK줄에 걸쳐 원하는 물건을 만드는 과정을 출력하는데, 순서대로 몇 번째 규칙을 연속적으로 몇 번 사용할 것인지 공백 하나로 구분하여 출력하면 된다. 규칙을 사용하는 횟수는 11이상 101610^{16}이하여야 한다. 또한 특정 규칙을 사용할 때는, 필요한 재료가 이미 모두 만들어져 있어야 한다.

예제 1

입력

5 0 10 branch 0 5 reed 0 5 stone 1 branch 1 10 woodstick 3 stone 1 woodstick 1 reed 2 50 stoneaxe

출력

5 2 2 1 1 4 1 3 1 5 1

예제 2

입력

3 0 8 stone 1 stone 2 1 stone 1 stone 3 3 stoneaxe

출력

2 1 3 3 1

예제 설명

예제 1은 문제 설명에서 주어진 예제와 같다.

예제 2에서 2번 규칙을 적용하면 힘들여 만든 돌의 개수를 줄이기만 하므로 쓸모가 없다. 그러므로 1번 규칙과 3번 규칙만을 이용하여 돌도끼를 만들면 된다.

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 23

같은 물건을 만드는 규칙이 여러 번 주어지지 않는다.

종류 2: 77

문제의 원래 제한조건 이외의 추가된 제한이 없음.

단, 출력에 잘못된 내용이 없고, 출력의 결과로 돌도끼가 하나 만들어 졌다면 점수의 절반을 받는다. 사용한 에너지량이 최소가 되면 전체 점수를 얻을 수 있다.

해설