트리 라벨링

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

트리 T=(V,E)T = (V, E)가 있다. VV는 정점의 집합이고 EE는 간선의 집합이다. 간선으로 vv와 이어진 정점을 TT에서 vv의 이웃이라 하고, vv의 이웃을 모두 모은 집합을 N(v)N(v)로 쓴다.

TT의 라벨링은 일대일 대응 함수 f:V{1,2,,V}f : V \to \{1, 2, \dots, |V|\}이다.

두 라벨링 ffgg가 다음 조건을 만족하면 서로 동치라고 한다. 모든 정점 uVu \in V에 대해, f(u)=g(v)f(u) = g(v)이고 {f(u)uN(u)}={g(v)vN(v)}\{f(u') \mid u' \in N(u)\} = \{g(v') \mid v' \in N(v)\}인 정점 vVv \in V가 존재한다. 이 정의에 따라 라벨링 ff는 자기 자신과 동치이다.

아래 그림은 서로 동치인 두 라벨링이다.

서로 동치인 두 라벨링

트리 TTTT의 라벨링 ff가 주어질 때, ff와 동치인 라벨링의 개수를 세는 프로그램을 작성하라. ff 자신도 ff와 동치이므로 개수에 포함한다.

입력

입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 TT (1T201 \le T \le 20)가 주어진다.

각 테스트 케이스의 첫 줄에는 트리의 정점 개수 NN (1N10001 \le N \le 1000)이 주어진다. 이어지는 N1N-1개의 줄에는 각각 두 정수 iijj (1i,jN1 \le i, j \le N)가 주어지며, 정점 ii와 정점 jj를 잇는 간선을 뜻한다. 그다음 줄에는 라벨링을 나타내는 정수 NN개가 주어지고, 그중 ii번째 수는 정점 ii의 라벨이다. 모든 정수는 공백 하나로 구분된다.

출력

출력은 표준 출력으로 한다. 각 테스트 케이스마다 ff와 동치인 라벨링의 개수를 한 줄에 출력한다. 이 개수는 매우 커질 수 있으므로 나머지 연산 없이 정확한 값을 출력한다.