#2413 함수 선언부 생략하기

38  1 s   128 MB  

Description

C언어에서 함수의 선언부란 해당 함수를 호출하기 전에 컴파일러에게 아래와 같은 형태로 함수의 존재와 형태를 알려주는 부분입니다.

반환자료형 함수이름(param1자료형 param1이름, ...);

선언부의 예시는 다음과 같습니다.

int foo( double bar, int fox, char jump );

만약 함수의 정의 부분이 함수 호출보다 먼저 오게 될 경우에 한해 선언부가 생략이 가능합니다.

예를 들어 아래와 같은 경우는 생략이 불가능하지만,

void foo(); // 선언부
int main() { 
    ...  
    foo(); // 호출
    ...
}
void foo() { // 정의
   ...
}

아래와 같이 정의 부분을 호출부보다 먼저 써 주면 생략이 가능합니다.

void foo() { // 정의
    ...
}
int main() {
    ...
    foo(); // 호출
    ...
}

민호는 되도록이면 함수의 선언부를 생략하고 싶지만 그럴 수 없는 경우도 있다는 것을 깨달았습니다.민호가 작성한 함수와 그 함수에서 호출하는 함수의 목록이 주어질 때, 정의들을 임의적인 순서로 배치하여 민호가 선언부를 모두 생략할 수 있는지 없는지를 출력하는 프로그램을 작성하세요.

단, 재귀함수(정의 내에서 자기 자신을 호출하는 함수)는 없다고 가정합니다.

Input

입력의 첫째 줄에 함수의 갯수 $N (1 \leq N \leq 100)$이 주어집니다. 둘째 줄부터 $N$개의 줄에 각 함수가 호출하는 함수의 정보가 주어집니다.

$i+1$번째 줄의 가장 앞에는 $i$번 함수가 호출하는 함수의 갯수 $A_{i}(0 \leq A_{i} < N)$가 주어집니다. 그 뒤에 공백 이후에 $i$번 함수가 호출하는 번호인 $A_{i}$개의 숫자들이 공백으로 구분되어 주어집니다. 이 숫자들은 1이상 $N$이하의 정수로 입력되며, 동일한 숫자가 두번 입력되는 경우는 존재하지 않습니다.

Output

민호가 선언부를 모두 생략할 수 있다면 Yes, 그럴 수 없다면 No를 출력합니다.

Sample Input

Sample Output

3
1 2
1 3
0
Yes

Sample Input 2

3
1 2
1 1
0

Sample Output 2

No

Source

SHAKE! 예선대회