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

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

선인장 간선 옮기기

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

요약
주어진 선인장 그래프에서 간선 하나를 삭제하고 다른 두 정점을 연결해도 선인장이 유지되는 경우의 수를 구합니다.
난이도

어려움10점 중 9점

유형
그래프, 조합론
정답자
아직 제출이 없습니다

문제

선인장은 모든 간선이 많아야 하나의 단순 사이클에만 속하는 연결 무향 그래프다. 트리에 사이클을 조금 허용한 그래프라고 보면 된다. 선인장에는 같은 두 정점을 잇는 다중 간선이 없고, 자기 자신으로 돌아오는 루프도 없다.

선인장이 하나 주어진다. 간선을 옮긴다는 것은 그래프에서 간선 하나를 지우고, 대신 다른 두 정점을 잇는 간선 하나를 넣는 것이다. 옮긴 뒤의 그래프도 선인장이어야 한다. 간선을 옮기는 방법이 몇 가지인지 구하여라.

지운 간선이 다르거나 넣은 간선이 다르면 서로 다른 방법으로 센다. 넣는 간선의 두 끝점은 지운 간선의 두 끝점과 같은 쌍일 수 없다.

위 그림은 선인장의 예 두 개다.

입력

첫째 줄에 정점의 개수 nn과 경로의 개수 mm이 주어진다 (1≤n≤500001 \le n \le 50000, 0≤m≤500000 \le m \le 50000). 정점은 11번부터 nn번까지 번호가 붙어 있다. 그래프의 간선은 서로 같은 간선을 두 번 쓰지 않는 경로 mm개로 주어진다.

다음 mm개 줄에는 경로가 하나씩 주어진다. 각 줄은 정수 kik_i (2≤ki≤10002 \le k_i \le 1000)로 시작하고, 그 뒤에 11 이상 nn 이하인 정수 kik_i개가 이어진다. 이 수들은 경로가 지나는 정점을 순서대로 나타낸다. 경로에서 이웃한 두 정점은 서로 다르다. 한 경로가 같은 정점을 여러 번 지날 수 있지만, 그래프의 각 간선은 입력 전체에서 정확히 한 번만 나온다.

주어지는 그래프는 선인장이다.

출력

간선을 옮기는 방법의 수를 정수 하나로 출력한다.

예제4

  1. 예제 1

    입력
    6 1
    7 1 2 5 6 2 3 4
    
    예상 출력
    42
    
  2. 예제 2

    입력
    15 3
    9 1 2 3 4 5 6 7 8 3
    7 2 9 10 11 12 13 10
    5 2 14 9 15 10
    
    예상 출력
    216
    
  3. 예제 3

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

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