Bovine Alliance

Беси и ее бычок решили соединить свои фермы дорожками, чтобы 
сформировать союз против фермеров. Коровы в каждой из N (1 <= N
<= 100,000) ферм были изначально проинструктированы, чтобы 
построить одну дорожку ровно к одной другой ферме. Всего получилось
N дорожек. Однако через несколько месяцев после начала проекта  
реально построены были только M (1 <= M < N) дорожек.
Беси хочет узнать, сколькими способами могли быть построены
эти M дорожек. Например, если между фермами 3 и 4 есть дорожка,
Один способ, что ее построила ферма 3, другой - что ферма 4.

Помогите Беси посчитать количество способов назначения к дорожкам
построивших их ферм по модулю 1 000 000 007. Два назначения 
рассматриваются как различные, если хоть одна дорожка построена
разными фермами в этих двух назначениях.
 
PROBLEM NAME: alliance

INPUT FORMAT:

* Строка 1: Два разделенных пробелами целых числа N и M

* Строки 2..1+M: Строка i+1 описывает i-ую дорожку. Каждая 
                 строка содержит два разделенных пробелом целых числа
                 u_i v_i (1 <= u_i, v_i <= N,  u_i != v_i), описывающих
                 пару ферм, соединенных дорожкой.  

SAMPLE INPUT (файл alliance.in):

5 4
1 2
3 2
4 5
4 5

INPUT DETAILS:

Заметим, могут быть две дорожки, между одной и той же парой ферм

OUTPUT FORMAT:

* Строка 1: Одна строка, содержащая число назначений дорожек фермам,
            взятое по модулю 1,000,000,007. Если не существует 
            назначений, удовлетворяющих заданным условиям,
           выведите 0.

SAMPLE OUTPUT (файл alliance.out):

6

OUTPUT DETAILS:

Всего существует 6 возможных назначений.
Обозначение {a,b,c,d} означает, что ферма 1 построила дорожку a, 
Ферма 2 построила дорожку b, ферма 3 построила дорожку c, а ферма
4 построила дорожку d.
Эти 6 назначений таковы:
{2, 3, 4, 5}
{2, 3, 5, 4}
{1, 3, 4, 5}
{1, 3, 5, 4}
{1, 2, 4, 5}
{1, 2, 5, 4}