선인장 선물
시간 제한1.5초메모리 제한512 MB
정점이 4000개 이하인 선인장 그래프에서 길이 1부터 N까지의 방향 있는 단순 경로 개수를 1e9+7로 나눈 나머지로 센다.
문제
선인장 그래프는 정점 개와 간선 개로 이루어진 그래프이고, 모든 간선이 많아야 하나의 단순 사이클에 속한다. 단순 사이클은 시작점과 끝점을 빼면 경로 위의 정점이 모두 다른 경로이다. 정점 집합이 같은 단순 사이클은 하나로 센다. 선인장 그래프를 보통 연결 그래프로 정의하지만, 이 문제에서는 연결되어 있지 않아도 된다.
선인장 그래프가 주어지면 길이가 ()인 단순 경로의 개수를 모두 세라. 단순 경로는 경로 위의 정점이 모두 다른 경로이고, 단순 경로의 길이는 그 경로에 속한 정점의 개수이다.
정점을 지나는 순서가 다르면 서로 다른 단순 경로로 센다. 정점 과 정점 를 잇는 간선이 있으면 에서 로 가는 경로와 에서 로 가는 경로는 서로 다르다.
입력
첫째 줄에 선인장의 정점 수 과 간선 수 이 주어진다. (, )
다음 개 줄에 간선의 두 끝 정점 와 가 주어진다. () 같은 간선은 두 번 주어지지 않고, 입력으로 주어지는 그래프는 항상 선인장 그래프이다.
출력
한 줄에 개의 수를 공백으로 구분해 출력한다. 번째 수는 길이가 인 단순 경로의 개수를 로 나눈 나머지이다.
힌트
정점 세 개가 간선 , 으로 이어진 그래프를 보자.
길이가 인 단순 경로는 , , 으로 세 개다.
길이가 인 단순 경로는 , , , 로 네 개다.
길이가 인 단순 경로는 , 로 두 개다.