What did you dream?
It's all right, we told you what to dream
Cerință
O permutare a numerelor era sortată crescător. Cineva a scos un singur element și l-a reinserat pe altă poziție (de exemplu, 1 2 3 4 5 → 1 4 2 3 5). Asemenea incidente se întâmplă des, așa că vrei să automatizezi repararea. Problema este că orice element poate fi mutat oriunde și nu poți prezice ce se va întâmpla, așa că trebuie să iei în calcul toate posibilitățile. De aceea, dorești să aplici algoritmul.
Algoritmul
Un algoritm de lungime este o secvență de operații , unde este o poziție, iar . Algoritmul se aplică unei permutări executând operațiile în ordine. Operația interschimbă elementele și doar dacă și ; altfel nu face nimic.
Un algoritm este bun dacă, aplicat oricărei permutări obținute din permutarea sortată prin mutarea unui singur element, o sortează crescător. Același algoritm, cu aceleași poziții și aceleași reușite, trebuie să funcționeze pentru toate aceste permutări.
Algoritmul se generează aleator: fiecare poziție se alege uniform din , iar fiecare este „reușită” cu probabilitatea și „eșec” cu probabilitatea . Toate aceste alegeri sunt independente.
Să se determine probabilitatea ca algoritmul generat să fie bun.
Date de intrare
Pe prima linie se găsesc trei numere întregi, , și .
Date de ieșire
Pe prima linie se va afișa un singur număr întreg, probabilitatea cerută modulo .
Restricții și precizări
- ;
- ;
- ;
- Se poate demonstra că probabilitatea cerută se poate scrie ca o fracție ireductibilă , unde nu este divizibil cu . Se cere valoarea , unde este inversul modular al lui .
- Pentru 15 puncte, și ;
- Pentru alte 35 de puncte, și .
Exemplul 1
stdin
3 4 100
stdout
499122177
Explicație
Toate operațiile reușesc, iar pozițiile formează unul dintre cei algoritmi posibili, toți la fel de probabili. Exact dintre ei sunt buni: de exemplu, este bun, iar nu este, deoarece nu sortează permutarea 2 3 1. Probabilitatea este , iar .
Exemplul 2
stdin
4 6 80
stdout
315856191
Explicație
Probabilitatea ca algoritmul să fie bun este aproximativ .