다리 강화
시간 제한2초메모리 제한512 MB
최대 차수가 2인 그래프에서 원래 그래프와 같은 연결 성분을 이루는 최소 크기 간선 부분집합의 개수를 1e9+7로 나눈 나머지를 구한다.
문제
바이트랜디아는 군사 훈련을 준비하고 있다. 이는 매우 중요한 행사라서 바이트랜디아 국방부 장관이 훈련 준비를 현장에서 직접 감독한다. 국방부 장관은 탱크 훈련이 어떻게 진행될지 걱정하고 있다.
바이트랜디아는 여러 섬으로 이루어져 있고, 그중 일부는 다리로 연결되어 있다. 각 다리는 서로 다른 두 섬을 연결하며, 어떤 두 섬도 다리 하나로만 직접 연결되어 있다. 바이트랜디아 사람들은 매우 검소해서, 각 섬에는 다리가 두 개 이하로만 연결된다.
행사 계획은 아직 정해지지 않았지만, 탱크 훈련 계획이 다음과 같을 것이라는 점은 알려져 있다. 탱크는 한 섬에서 다른 섬으로 일부 다리를 이용해 이동해야 하며, 탱크가 어떤 다리를 이용하는지는 상관없다. 바이트랜디아에는 오래전에 지어져 탱크에 전혀 적합하지 않은 다리가 많다. 그래서 국방부 장관은 일부 다리를 강화하기로 했다. 구체적으로, 그는 몇 개의 다리를 강화해서 훈련 계획에 상관없이 다음 조건이 성립하도록 하려고 한다. 섬 에서 섬 로 이동할 수 있었다면, 일부 다리를 강화한 뒤에도 강화된 다리만 이용해 섬 에서 섬 로 이동할 수 있어야 한다. 다리 강화는 비용이 많이 드는 작업이므로, 장관은 최소 개수의 다리만 강화하려고 한다.
바이트랜디아 국방부 장관은 최소 개수의 다리를 강화하는 서로 다른 방법이 몇 가지인지 알고 싶어 한다. 두 방법은 어떤 다리가 한 방법에서는 강화되고 다른 방법에서는 강화되지 않으면 서로 다른 것으로 본다. 국방부 장관이 오랫동안 고민해 온 이 질문의 답을 구하도록 도와주자. 답이 매우 클 수 있으므로 로 나눈 나머지를 출력한다.
입력
첫째 줄에 정수 과 이 주어진다. (, ) 은 섬의 수, 은 바이트랜디아의 다리 수이다. 다음 개 줄에 다리가 하나씩 주어진다. 각 다리는 정수 와 로 주어진다. (, ) 번 다리가 연결하는 두 섬의 번호이다.
각 다리는 입력 파일에 두 번 이상 주어지지 않는다.
각 섬에는 다리가 두 개 이하로 연결된다.
출력
다리를 강화하는 방법의 수를 로 나눈 나머지를 출력한다.
힌트
첫 번째 예제에는 세 가지 강화 방법이 있다. 다리 를 강화하거나, 를 강화하거나, 를 강화하는 것이다.