시간 제한
메모리 제한
시간 제한
1초
메모리 제한
128 MB
동네 친구들이 축구 경기를 하려고 학교 운동장에 모였고, 두 팀으로 나뉘어야 한다. 선수들은 1번부터 N번까지 번호가 적힌 티셔츠를 입는데, 가장 잘하는 선수가 1번이고 가장 못하는 선수가 N번이 되도록 번호가 매겨져 있다.
두 팀의 인원수는 같아야 한다. 각 선수는 자기 팀에 같이 있고 싶지 않은 동료들의 명단을 작성한다. 누구나 자신보다 잘하는 선수와 함께 뛰고 싶어 하므로, 각 선수의 명단에는 자신보다 못하는 선수(즉, 자신보다 번호가 큰 선수)만 들어간다.
두 팀으로 똑같이 나눈 것이 유효하려면, 모든 선수에 대해 그 선수의 명단에 있는 동료가 그 선수와 같은 팀에 있어서는 안 된다. 유효한 분할이 몇 가지나 있는지 세어라.
첫째 줄에 짝수 N (2 ≤ N ≤ 1000), 즉 친구의 수가 주어진다.
다음 N개의 줄은 각 선수의 명단을 나타내며, (i+1)번째 줄은 i번 선수의 명단을 다음 형식으로 나타낸다.
K A1 A2 ... AK이는 i번 선수가 A1, A2, ..., AK 중 누구도 같은 팀에 두고 싶어 하지 않는다는 뜻이다. 나열된 번호는 모두 i보다 크다.
입력에는 항상 유효한 분할이 적어도 하나 존재함이 보장된다.
유효한 분할, 즉 인원수가 같은 두 팀으로 나누는 서로 다른 방법의 수를 정수 하나로 출력한다. 두 분할은 만들어지는 두 팀의 (순서 없는) 쌍이 같으면 같은 것으로 본다. 두 팀은 서로 구분하지 않는다.
K A1 A2 ... AK