MemSQL Start[c]UP 3.0 - Round 1 |
---|
Закончено |
Привезли новые рабочие столы, и нужно с ними поскорее разобраться, так как в офисе стало очень тесно! Вам нужно составить новую рассадку инженеров в офисе. Столы пронумерованы, и вы провели опрос среди инженеров, выяснив, за каким столом они работают сейчас, и за каким столом они хотели бы работать (может совпадать с тем столом, за которым они сейчас работают). Каждый инженер должен либо остаться на своем месте, либо переместиться на то место, которое он обозначил как желаемое. Никакие два инженера не работают сейчас за одним столом, и после пересадки никакие два инженера также не должны работать за одним столом.
Сколько существует способов рассадить инженеров так, чтобы удовлетворить описанным ограничениям? Ответ может быть большим, поэтому выведите его по модулю 1000000007 = 109 + 7.
В первой строке находится одно целое число N (1 ≤ N ≤ 100000) — количество инженеров.
Далее следуют N строк, в каждой из них находятся ровно два целых числа. Строка i содержит номер стола, за которым сейчас работает i-й инженер, и затем номер стола, за который i-й инженер хотел бы переехать. Столы пронумерованы от 1 до 2·N. Гарантируется, что никакие два инженера не работают сейчас за одним столом.
Выведите число способов рассадить всех инженеров по модулю 1000000007 = 109 + 7.
4
1 5
5 2
3 7
7 3
6
5
1 10
2 10
3 10
4 10
5 5
5
Следующие рассадки возможны в первом примере:
Название |
---|