sistem

Time limit: 0.03s Memory limit: 64MB Input: sistem.in Output: sistem.out

Judeţul în care are loc Olimpiada Naţională de Informatică de anul acesta este puţin ciudat. În judeţ există N oraşe, numerotate de la 1 la N. Fiecare dintre cele N oraşe ale judeţului este legat de EXACT alte 2 oraşe, prin străzi bidirecţionale. Şi mai ciudat este faptul că, în cadrul acestui sistem stradal, nu este întotdeauna posibil să ajungi din orice oraş în oricare alt oraş mergând pe străzi. Oricum, locuitorii judeţului sunt mândri de acest sistem al lor şi sunt de părere că nu mai există altul la fel. Dumneavoastră vreţi să le demonstraţi contrariul şi pentru aceasta vreţi să calculaţi câte sisteme stradale distincte cu proprietatea de mai sus există. Două sisteme sunt considerate distincte dacă există cel puţin o stradă între o pereche de oraşe i şi j în cadrul primului sistem, care nu există în cadrul celui de-al doilea.

Cerinţă

Scrieţi un program care să calculeze câte sisteme stradale distincte există modulo 1 000 000 007.

Date de intrare

Din fişierul sistem.in veţi citi valoarea întreagă n, reprezentând numărul de oraşe ale judeţului.

Date de ieşire

În fişierul sistem.out veţi afişa o valoare întreagă, reprezentând numărul de sisteme stradale distincte, cu proprietatea că orice oraş este legat prin străzi directe de exact alte 2 oraşe.

Restricţii

  • 3 ≤ n ≤ 100 000
  • Restricțiile și cerința au fost modificate
  • Pentru 16 puncte avem n ≤ 14
  • Pentru alte 16 puncte avem n ≤ 100
  • Pentru alte 16 puncte avem n ≤ 500
  • Pentru alte 16 puncte avem n ≤ 2000

Exemple

sistem.in

4

sistem.out

3

sistem.in

6

sistem.out

70

sistem.in

776

sistem.out

552369242

Explicații

Cele 3 soluţii sunt următoarele:

Log in or sign up to be able to send submissions!