만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

멈추는 늑대

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

요약
유한 점프와 무한 점프로 이루어진 프로그램에서 명령 1이 최대 몇 번 실행되는지 구하거나, 무한히 실행되는 경우를 판별합니다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 동적 계획법, 최단 경로
정답자
아직 제출이 없습니다

문제

Senoof는 프로그래밍 언어를 좋아하고, 그 언어를 쓰는 것보다 새로 만드는 것을 더 좋아한다. 그의 최신 발명품은 Wolf Programming Language이다. 명령어가 두 종류뿐인 아주 단순한 언어다. 명령어에는 번호가 차례로 붙고, 한 줄에 하나씩 위에서 아래로 적어 프로그램을 만든다. 실행은 1번 명령어에서 시작해 프로그램이 멈출 때까지 계속된다.

명령어는 두 종류다.

  • K L1 L2 ... LK는 유한 점프다. 각 값 Li는 프로그램 안의 명령어 번호이고, K는 주어진 값의 개수다. 유한 점프를 실행하면 값 Li 중 하나를 골라 그 번호의 명령어로 이동한다. 이어서 프로그램은 고른 값을 소비하도록 그 유한 점프를 고친다. 남은 값이 없는 유한 점프를 실행하면 프로그램은 멈춘다.
  • * L은 무한 점프다. 실행하면 명령어 L로 이동하고, 무한 점프 명령어 자체는 바뀌지 않는다.

예를 들어 아래 (a)의 프로그램에서 실행은 유한 점프인 1번 명령어에서 시작한다. 두 번째 값을 골랐다고 하면 2번 명령어로 이동하고, 그 값은 1번 명령어에서 소비되어 상태 (b)가 된다. 2번은 3번으로 가는 무한 점프이므로 아무 값도 소비하지 않고 3번으로 간다. 3번에서 4번으로, 다시 1번으로, 또 1번으로 이동하며 그때마다 값을 소비한다. 이 시점에 1번에는 남은 값이 없어서 상태 (c)처럼 프로그램이 멈춘다.

(a)

1: 2 1 2
2: * 3
3: 3 4 3 4
4: 2 1 1

Senoof가 보내 준 다음 프로그램은 영원히 실행될 수 있지만, 1번 명령어는 최대 두 번만 실행된다. 즉 어떤 명령어도 무한히 실행되지 않으면서 프로그램이 영원히 돌 수 있다.

1: 2 1 2
2: * 4
3: 3 4 3 4
4: * 2

입력

첫 줄에 명령어의 개수 NN (1≤N≤1001 \le N \le 100)이 주어진다. 다음 NN개의 줄은 각각 명령어 하나를 나타낸다. 유한 점프는 0 이상의 정수 KK와 그 뒤에 이어지는 KK개의 정수 L1,L2,…,LKL_1, L_2, \ldots, L_K (1≤Li≤N1 \le L_i \le N)로 적는다. 무한 점프는 문자 *와 그 뒤의 정수 LL (1≤L≤N1 \le L \le N)로 적는다. 모든 유한 점프에 나열되는 값의 총합 개수는 10410^4 이하다.

출력

명령어 1을 실행할 수 있는 최대 횟수를 한 줄에 정수로 출력한다. 명령어 1을 무한히 실행할 수 있으면 대신 문자 *를 출력한다.

예제5

  1. 예제 1

    입력
    4
    2 1 2
    * 3
    3 4 3 4
    2 1 1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    4
    2 1 2
    * 4
    3 4 3 4
    * 2
    
    예상 출력
    2
    
  3. 예제 3

    입력
    4
    2 2 3
    2 3 4
    1 1
    1 1
    
    예상 출력
    3
    
  4. 예제 4

    입력
    3
    * 3
    * 1
    * 2
    
    예상 출력
    *
    
  5. 예제 5

    입력
    1
    0
    
    예상 출력
    1