Ролевая игра

시간 제한2초메모리 제한1024 MB

요약
수행 시간, 경험치, 선행 조건이 주어진 퀘스트들을 m분 안에 최대 경험치를 얻도록 고르고 순서를 정한다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 위상 정렬
정답자
아직 제출이 없습니다

문제

Когда у Жени бывает свободное время, он любит тратить его на свою любимую ролевую игру. Конечно же, у него есть мечта --- достичь 255 уровня, то есть набрать необходимое количество очков опыта. К сожалению, у него не так много свободного времени, потому он хочет использовать его максимально эффективно и просит Вас помочь ему в этом.

Набирать очки опыта в игре можно посредством выполнения некоторых заданий. Для каждого задания известно время его выполнения, сколько очков оно приносит и список заданий, которые необходимо выполнить до того, как это задание станет доступно.

Помогите Жене выяснить, какое максимальное количество опыта, он сможет набрать за свободное время.

입력

Первая строка входного файла содержит два целых числа nn и mm (1≤n≤16,1≤m≤10001 \le n \le 16, 1 \le m \le 1000) --- количество заданий и количество свободного времени у Жени в минутах. В следующих nn строках следуют описания заданий по одному в каждой строке в следующем формате: сначала два целых числа t_it\_i, p_ip\_i и k_ik\_i (1≤t_i,p_i≤1000,0≤k_i<n1 \le t\_i, p\_i \le 1000, 0 \le k\_i < n) --- время в минутах, которое занимает выполнение ii-го задания, сколько опыта получит персонаж Жени при его выполнении, и количество заданий, которые необходимо выполнить до ii-го, соответственно. Далее следуют k_ik\_i различных чисел от 11 до nn --- номера заданий, которые необходимо выполнить до ii-го.

출력

В первой строке выведите единственное целое число --- максимальное количество опыта, которое Женя может набрать за свободное время. В следующей строке выведите номера заданий, которые необходимо выполнить для получения такого количества опыта, в том порядке, в котором их необходимо выполнять.

예제2

  1. 예제 1

    입력
    2 10
    5 3 1 2
    5 2 0
    
    예상 출력
    5
    2 1
    
  2. 예제 2

    입력
    3 9
    4 1 0
    5 2 1 1
    6 3 1 1
    
    예상 출력
    3
    1 2