트리 라벨링
시간 제한1초메모리 제한128 MB
최대 1000개 정점을 가진 트리와 하나의 라벨링이 주어질 때 각 라벨의 이웃 라벨 집합을 유지하는 라벨링 개수를 구합니다.
문제
트리 가 있다. 는 정점의 집합이고 는 간선의 집합이다. 간선으로 와 이어진 정점을 에서 의 이웃이라 하고, 의 이웃을 모두 모은 집합을 로 쓴다.
의 라벨링은 일대일 대응 함수 이다.
두 라벨링 와 가 다음 조건을 만족하면 서로 동치라고 한다. 모든 정점 에 대해, 이고 인 정점 가 존재한다. 이 정의에 따라 라벨링 는 자기 자신과 동치이다.
아래 그림은 서로 동치인 두 라벨링이다.

트리 와 의 라벨링 가 주어질 때, 와 동치인 라벨링의 개수를 세는 프로그램을 작성하라. 자신도 와 동치이므로 개수에 포함한다.
입력
입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 ()가 주어진다.
각 테스트 케이스의 첫 줄에는 트리의 정점 개수 ()이 주어진다. 이어지는 개의 줄에는 각각 두 정수 와 ()가 주어지며, 정점 와 정점 를 잇는 간선을 뜻한다. 그다음 줄에는 라벨링을 나타내는 정수 개가 주어지고, 그중 번째 수는 정점 의 라벨이다. 모든 정수는 공백 하나로 구분된다.
출력
출력은 표준 출력으로 한다. 각 테스트 케이스마다 와 동치인 라벨링의 개수를 한 줄에 출력한다. 이 개수는 매우 커질 수 있으므로 나머지 연산 없이 정확한 값을 출력한다.