만드는 중입니다

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

4-사이클 (Hard)

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

요약
정점이 최대 10^5개, 간선이 최대 10^5개인 무방향 그래프에서 길이가 4인 서로 다른 단순 사이클의 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

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

문제

NN개의 정점과 MM개의 무방향 간선으로 이루어진 단순 그래프 GG가 주어진다. 단순 그래프는 두 정점 사이에 간선이 최대 11개 있고, 모든 간선이 서로 다른 두 정점을 잇는 그래프이다. GG의 정점들은 NN 이하의 양의 정수로 번호가 매겨져 있다.

그래프 GG에서 길이가 LL인 단순 사이클은 다음 조건을 만족하는 정점의 수열 (v0,v1,⋯ ,vL)\left( v_0,v_1,\cdots ,v_L \right)이다.

  • 모든 0≤i<L0 \leq i < L인 ii에 대해 viv_i와 vi+1v_{i+1}을 잇는 간선이 GG에 있다.
  • 모든 0≤i<j<L0 \leq i < j < L인 i,ji,j에 대해 vi≠vjv_i \neq v_j이고, vL=v0v_L = v_0이다.

다음 연산으로 두 단순 사이클을 서로 바꿀 수 있으면 같은 사이클로 본다.

  • 수열을 뒤집는다. 즉, (v0,v1,⋯ ,vL)\left( v_0,v_1,\cdots ,v_L \right)을 (vL,⋯ ,v1,v0)\left( v_L,\cdots ,v_1,v_0 \right)로 바꾼다.
  • 수열의 두 번째 원소를 맨 뒤에 추가하고 첫 번째 원소를 삭제한다. 즉, (v0,v1,⋯ ,vL)\left( v_0,v_1,\cdots ,v_L \right)을 (v1,⋯ ,vL,v1)\left( v_1,\cdots ,v_L,v_1 \right)로 바꾼다.

예를 들어 단순 사이클 (1,2,3,4,1)\left( 1,2,3,4,1 \right)과 (2,1,4,3,2)\left( 2,1,4,3,2 \right)는 같은 단순 사이클이다. 그래프 GG에서 길이가 44인 서로 다른 단순 사이클의 개수를 구해 보자.

입력

첫 번째 줄에 정점의 개수 NN(2≤N≤1052 \leq N \leq 10^5)과 간선의 개수 MM(1≤M≤1051 \leq M \leq 10^5)이 공백으로 구분되어 주어진다.

두 번째 줄부터 MM줄에 걸쳐 간선을 이루는 서로 다른 두 정점 u,vu,v(1≤u,v≤N1 \leq u,v \leq N)가 공백으로 구분되어 주어진다.

간선이 중복으로 들어오지 않음이 보장된다.

출력

그래프 GG에서 길이가 44인 서로 다른 단순 사이클의 개수를 109+710^9+7로 나눈 나머지를 출력한다.

단, 109+710^9+7은 소수이다.

예제3

  1. 예제 1

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

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

    입력
    6 15
    1 2
    1 3
    1 4
    1 5
    1 6
    2 3
    2 4
    2 5
    2 6
    3 4
    3 5
    3 6
    4 5
    4 6
    5 6
    
    예상 출력
    45