Принцип <<горячей картошки>>

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

요약
각 노드의 고정된 라우팅 일정과 패킷 발생 시각이 주어질 때, 충돌 없이 목적지에 도달하도록 최대 개수의 패킷을 고른다.
난이도

어려움10점 중 8점

유형
그래프, 시뮬레이션, 동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

Принцип <<горячей картошки>> представляет собой метод маршрутизации пакетов в сети. Его основными достоинствами являются отсутствие таблиц маршрутизации и отсутствие необходимости анализировать пакеты в процессе их маршрутизации.

Будем считать, что сеть состоит из nn узлов, между некоторыми парами узлов установлены сетевые соединения. Каждый узел в сети имеет расписание. Расписание узла ii представляет собой последовательность a_i,0,a_i,1,…,a_i,l_i−1a\_{i,0}, a\_{i,1}, \ldots, a\_{i, l\_i - 1} номеров узлов. Сеть работает по тактам следующим образом.

В течение некоторого такта tt в сети может находиться несколько пакетов. Каждый пакет имеет исходный узел и узел, в который он должен быть доставлен, в течение такта он находится в некотором узле. У каждого пакета есть время его появления, в начале этого такта он возникает в своем исходном узле. Если в течение такта tt пакет находится в том узле, в который он должен быть доставлен, то считается, что он доставлен в момент tt и он исчезает из сети. Иначе он переправляется в узел a_i,t mod l_ia\_{i, t \bmod l\_i}, где он оказывается в начале следующего такта. Если в начале некоторого такта несколько пакетов оказываются в одном узле, они все уничтожаются.

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

Вам задано описание сети и набор пакетов. Для каждого пакета вы можете решить, будете ли вы пытаться его доставить. Вы должны выбрать максимальное количество пакетов, чтобы все они в процессе работы сети оказались доставлены.

입력

Первая строка входного файла содержит число nn --- количество узлов в сети (1≤n≤1001 \le n \le 100). Следующие nn строк описывают узлы, ii-й узел описывается сначала числом l_il\_i --- длиной своего расписания, а затем l_il\_i числами: a_i,0,a_i,1,…,a_i,l_i−1a\_{i,0}, a\_{i,1}, \ldots, a\_{i, l\_i-1} (1≤l_i≤81 \le l\_i \le 8, a_i,j≠ia\_{i,j} \ne i).

Следующая строка входного файла содержит число pp --- количество пакетов (1≤p≤1001 \le p \le 100), затем следует pp строк, которые описывают пакеты. Каждый пакет описывается своим исходным узлом s_is\_i, узлом, в который его следует доставить d_id\_i и временем появления t_it\_i (s_i≠d_is\_i \ne d\_i, 0≤t_i≤10000 \le t\_i \le 1000).

출력

На первой строке выходного файла выведите целое число kk --- максимальное количество пакетов, которое можно доставить. Вторая строка должна содержать kk целых чисел --- номера пакетов, которые можно доставить. Пакеты нумеруются от 1 до pp в порядке, в котором они заданы во входном файле.

예제1

  1. 예제 1

    입력
    4
    2 2 3
    3 1 1 3
    3 4 4 2
    1 3
    3
    1 3 0
    3 1 2
    4 2 3
    
    예상 출력
    2
    2 3