N명을 두 여행에 배정하되 각 여행의 참가자가 모두 서로 아는 사이이고 각각 A명, B명 이상이며 모든 사람이 적어도 한 여행에 가는 경우의 수를 10007로 나눈 나머지를 구한다.
어느 작은 도시의 소방대에는 NNN명의 대원이 있고, 대원끼리 모두 서로 아는 사이는 아니다. 대원에게는 111부터 NNN까지 번호가 붙어 있다.
힘든 여름 화재 진압 시즌을 마친 소방대는 앞으로 두 주말 동안 자연으로 소풍을 두 번 가려고 한다.
여행사가 보낸 제안은 첫 번째 소풍에 AAA명 이상, 두 번째 소풍에 BBB명 이상이 참가해야만 유효하다. 또 소풍에서 어색한 상황이 생기지 않도록, 같은 소풍에 참가하는 두 사람은 반드시 서로 아는 사이여야 한다.
소방관 미르코는 모든 대원이 적어도 한 번의 소풍에 참가하고 위 조건을 모두 만족하도록 대원을 배정하는 일을 맡았다. 한 대원이 두 소풍에 모두 참가해도 된다.
대원 사이의 아는 관계가 주어질 때, 미르코가 배정을 정하는 방법의 수를 구하는 프로그램을 작성하시오. 어떤 대원이 어떤 소풍에 참가하는지 여부가 하나라도 다르면 서로 다른 방법으로 센다.
첫째 줄에 네 정수 NNN, MMM, AAA, BBB가 주어진다. 차례로 소방대 대원 수, 대원 사이의 아는 관계 수, 첫 번째 소풍과 두 번째 소풍에 참가해야 하는 최소 인원이다. (1≤N≤5001 \le N \le 5001≤N≤500, 0≤M≤N(N−1)/20 \le M \le N(N-1)/20≤M≤N(N−1)/2, 1≤A,B≤N1 \le A, B \le N1≤A,B≤N)
다음 MMM개의 줄에는 각각 두 정수 UUU와 VVV가 주어진다. (1≤U,V≤N1 \le U, V \le N1≤U,V≤N, U≠VU \ne VU=V) 각 줄은 UUU번 대원과 VVV번 대원이 서로 아는 사이라는 뜻이다. 같은 관계는 두 번 이상 주어지지 않는다.
첫째 줄에 대원을 소풍에 배정하는 방법의 총 수를 출력한다. 이 수는 매우 클 수 있으므로 100071000710007로 나눈 나머지를 출력한다.