아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

체스 대회

시간 제한3초메모리 제한256 MB

요약
기록된 대결 목록과 일치하는 N명씩 팀 배분을 세고 1번 선수가 속한 팀 중 사전 순으로 가장 앞선 경우를 출력합니다.
난이도

보통10점 중 7점

유형
그래프, 유니온 파인드, 동적 계획법
정답자
아직 제출이 없습니다

문제

동네에서 큰 체스 대회가 열려 구경하러 갔다. 선수가 각각 nn명인 두 팀 A와 B가 맞붙고, A팀의 모든 선수는 B팀의 모든 선수와 한 번씩 대국한다. 승수가 더 많은 팀이 우승한다. 비긴 대국에서는 두 선수가 1/21/2점씩 나눠 가진다.

어느 선수가 어느 팀인지는 모르지만, 대회 기간에 치러진 대국은 하나도 빠짐없이 적어 두었다. 문제는 일부 선수가 연습 삼아, 또는 재미로 일정에 없는 대국까지 했다는 점이다. 같은 팀 선수와 둔 대국도 있고, 이미 만난 상대 팀 선수와 한 번 더 둔 대국도 있다. 이 기록만으로 선수가 어느 팀 소속인지 가려낼 수 있을까?

기록과 어긋나지 않는 팀 배정을 세어라. 즉 서로 다른 팀에 속한 모든 선수 쌍이 기록에 적어도 한 번 나오는 배정을 세면 된다. 두 팀에는 이름이 없으므로 A와 B를 맞바꾼 배정은 같은 배정으로 본다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다 (1≤T≤1001 \le T \le 100). 각 테스트 케이스는 다음과 같이 주어진다.

  • 첫 줄에 한 팀의 선수 수 NN과 기록된 대국 수 MM이 공백을 두고 주어진다 (1≤N≤2501 \le N \le 250, N2≤M≤106N^2 \le M \le 10^6).
  • 이어지는 MM개 줄에 서로 다른 두 정수 AA와 BB가 공백을 두고 주어진다 (1≤A<B≤2N1 \le A < B \le 2N). 선수 AA와 선수 BB가 대국했다는 뜻이다.

같은 쌍이 여러 번 나올 수 있다. 모든 테스트 케이스의 MM을 더한 값은 10610^6 이하다. 선수 번호는 1번부터 2N2N번까지이고, 기록과 어긋나지 않는 팀 배정은 항상 하나 이상 있다.

출력

각 테스트 케이스마다 두 줄을 출력한다.

  • 첫 줄에는 가능한 팀 배정의 수를 10810^8으로 나눈 나머지를 출력한다. 출력하는 값은 0 이상 10810^8 미만이어야 한다. 배정이 존재해도 나머지가 0일 수 있다.
  • 둘째 줄에는 1번 선수가 속한 팀의 선수 번호 NN개를 오름차순으로, 공백 하나로 구분해 출력한다. 가능한 배정이 여러 개면 이 오름차순 수열이 사전순으로 가장 앞서는 배정을 출력한다.

예제2

  1. 예제 1

    입력
    2
    2 4
    1 3
    2 4
    3 4
    1 2
    3 21
    1 2
    1 3
    1 3
    1 4
    1 5
    1 6
    2 3
    2 3
    2 4
    2 5
    2 6
    2 6
    3 4
    3 5
    3 5
    3 6
    4 5
    4 5
    4 6
    5 6
    5 6
    
    예상 출력
    1
    1 4
    10
    1 2 3
    
  2. 예제 2

    입력
    2
    1 1
    1 2
    4 26
    1 5
    5 6
    4 6
    3 7
    1 2
    6 7
    1 6
    2 4
    3 6
    3 8
    4 8
    5 8
    3 4
    4 7
    2 7
    3 5
    5 7
    7 8
    1 8
    2 5
    2 6
    1 7
    2 8
    6 8
    1 4
    1 3
    
    예상 출력
    1
    1
    7
    1 2 3 6