가지를 잘라 각 조각의 정점 수가 2의 거듭제곱이 되게 하는 최소 절단 집합의 개수를 세어 10^9+7로 나눈 나머지를 구한다.
어려움9트리동적 계획법조합론DFS아직 제출이 없습니다시간 제한1초메모리 제한512 MB정점이 n개이고 간선이 n−1개인 연결 그래프를 트리라고 한다. 수찬이는 트리를 배양해서 관찰하는 일에 푹 빠져 있다. 여느 날처럼 트리를 지켜보던 그는 정점의 개수가 2의 거듭제곱, 즉 20,21,22,…인 트리는 다른 트리와 전혀 반응하지 않고 움직이지도 않는다는 사실을 우연히 발견했다. 수찬이는 이런 트리가 안정적인 상태에 있다고 정의했다.

정점이 6개인 트리는 안정적인 상태가 아니고, 정점이 4개인 트리는 안정적인 상태이다.
수찬이는 동료 과학자 지학이에게 이 사실을 알렸다. 연구 노트를 읽은 지학이는 "모든 트리는 안정적인 상태가 되는 쪽으로 변하지 않을까?"라고 말했다. 지학이의 말에 일리가 있다고 본 수찬이는 여러 실험으로 그 추측이 사실임을 확인했다. 그가 알아낸 성질은 이렇다. 안정적인 상태가 아닌 트리는 스스로 간선을 끊어 자신을 적절히 쪼개어 몇 개의 트리로 나누는데, 이때 각 트리의 정점 개수가 모두 2의 거듭제곱이 되게 해서 스스로를 안정적인 상태로 만든다. 수찬이가 이 성질을 알리자, 지학이는 실험 데이터를 분석하다가 간선을 끊는 데 에너지가 든다는 것을 알게 되었고, 트리가 안정적인 상태로 변하는 과정에서 끊기는 간선의 개수를 최소로 하는 방식으로 나뉜다는 성질을 추가로 밝혀냈다.

정점이 6개인 어떤 트리가 안정적인 상태로 변하는 한 예.
두 사람은 트리가 정확히 어떤 방법으로 나뉘는지 알아보려고, 지금까지 밝혀낸 두 성질을 지키면서 트리가 나뉘는 서로 다른 방법의 수를 세어 보기로 했다. 나뉘는 방법이 서로 다르다는 것은 끊긴 간선의 집합이 서로 다르다는 뜻이다. 간선이 끊기는 순서는 상관이 없다.
정점이 n개인 트리가 주어질 때, 이 트리가 두 성질을 지키면서 나뉘는 서로 다른 방법의 수를 구하는 프로그램을 작성하라.
첫째 줄에 트리의 정점 개수 n이 주어진다. (2≤n≤4095) 각 정점에는 1부터 n까지 번호가 하나씩 붙어 있다.
다음 n−1개 줄에는 트리의 간선 정보가 한 줄에 하나씩 주어진다. 각 줄에는 그 간선이 잇는 두 정점의 번호 u와 v가 공백을 사이에 두고 주어진다. (1≤u,v≤n, u=v)
주어지는 그래프는 항상 트리이다.
첫째 줄에 두 성질을 지키면서 트리가 나뉘는 방법의 수를 109+7로 나눈 나머지를 출력한다.
첫 번째 예제의 트리를 그림으로 그리면 아래와 같다.

간선을 두 개 끊으면 정점이 4=22개인 트리, 2=21개인 트리, 1=20개인 트리로 나눌 수 있고, 방법은 아래 여섯 가지이다. 실선은 남아 있는 간선을, 점선은 끊긴 간선을 뜻한다.



두 번째 예제의 트리를 그림으로 그리면 아래와 같다.

이 트리는 간선을 세 개 끊어서 안정적인 상태가 된다. 나뉜 결과는 각 트리의 정점 개수에 따라 크게 두 가지로 분류된다.
정점이 4=22개인 트리 둘, 2=21개인 트리 하나, 1=20개인 트리 하나로 나뉘는 경우

정점의 개수가 4, 4, 2, 1인 트리 네 개로 나누는 방법의 예
정점이 8=23개인 트리 하나와 1=20개인 트리 셋으로 나뉘는 경우

정점의 개수가 8, 1, 1, 1인 트리 네 개로 나누는 방법의 예
따라서 방법의 수는 모두 60이다.