Олимпиадный тренинг

Задача . E. Беспорядок на рабочих местах


Привезли новые рабочие столы, и нужно с ними поскорее разобраться, так как в офисе стало очень тесно! Вам нужно составить новую рассадку инженеров в офисе. Столы пронумерованы, и вы провели опрос среди инженеров, выяснив, за каким столом они работают сейчас, и за каким столом они хотели бы работать (может совпадать с тем столом, за которым они сейчас работают). Каждый инженер должен либо остаться на своем месте, либо переместиться на то место, которое он обозначил как желаемое. Никакие два инженера не работают сейчас за одним столом, и после пересадки никакие два инженера также не должны работать за одним столом.

Сколько существует способов рассадить инженеров так, чтобы удовлетворить описанным ограничениям? Ответ может быть большим, поэтому выведите его по модулю 1000000007 = 109 + 7.

Входные данные

В первой строке находится одно целое число N (1 ≤ N ≤ 100000) — количество инженеров.

Далее следуют N строк, в каждой из них находятся ровно два целых числа. Строка i содержит номер стола, за которым сейчас работает i-й инженер, и затем номер стола, за который i-й инженер хотел бы переехать. Столы пронумерованы от 1 до N. Гарантируется, что никакие два инженера не работают сейчас за одним столом.

Выходные данные

Выведите число способов рассадить всех инженеров по модулю 1000000007 = 109 + 7.

Примечание

Следующие рассадки возможны в первом примере:

  • 1 5 3 7
  • 1 2 3 7
  • 5 2 3 7
  • 1 5 7 3
  • 1 2 7 3
  • 5 2 7 3

Примеры
Входные данныеВыходные данные
1 4
1 5
5 2
3 7
7 3
6
2 5
1 10
2 10
3 10
4 10
5 5
5

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя