Într-un laborator secret de matematică, elevii au descoperit o categorie bizară de numere pe care le-au numit factfact. Pentru a înțelege aceste numere, profesorii au reamintit mai întâi definiția factorialului: pentru un număr natural , factorialul său, notat reprezintă produsul numerelor naturale de la la (spre exemplu ). Un număr se numește factfact dacă se poate obține prin concatenarea (lipirea cifrelor) a exact două valori factoriale. De exemplu, numărul este factfact, deoarece se poate scrie ca concatenat cu adică urmat de . În schimb, numărul nu este factfact, deoarece nu există două factoriale ale unor numere naturale care, concatenate, să formeze această valoare. Profesorii au observat că astfel de coduri apar frecvent în bazele de date ale școlii, iar analiza lor a devenit esențială pentru arhivare și securitate. Dorel, pasionat de algoritmi, a primit sarcina de a identifica rapid aceste numere speciale, de a le compara și de a analiza secvențele în care apar, pentru a optimiza sistemul informatic al laboratorului. În primă fază, Dorel ar vrea să afle dacă un număr dat este factfact sau nu. Apoi, dându-se numerele din baza de date a școlii, ar vrea să afle numărul factfact cu valoare maximă dintre acestea. Din motive de securitate, el trebuie să afle care este cea mai lungă secvență de numere factfact care să conțină obligatoriu cel mai mare număr factfact dintre toate.
Cerință
- Determinați dacă un număr este factfact sau nu.
- Dându-se mai multe numere, determinați cel mai mare număr factfact dintre ele.
- Dându-se mai multe numere, determinați cea mai lungă secvență de numere factfact care să conțină obligatoriu cel mai mare număr factfact dintre toate.
Date de intrare
Pe prima linie a fișierului de intrare factfact.in se găsește reprezentând cerința.
- Dacă , pe cea de-a doua linie se va afla un singur număr natural cu semnificația din enunț.
- Dacă sau , pe cea de-a doua linie se va un număr natural . Pe următoarea linie se vor afla numere naturale , separate prin câte un spațiu.
Date de ieșire
Pe prima linie a fișierului de ieșire factfact.out se va găsi un singur număr întreg, după cum urmează:
- Dacă , se va afișa dacă numărul dat este factfact, iar în caz contrar.
- Dacă , se va afișa cel mai mare număr factfact dintre cele date.
- Dacă , se va afișa lungimea secvenței cerute.
Restricții și precizări
- Se garantează că pentru și există cel puțin un număr factfact în șir.
- În formarea numărului factfact, cele două numere nu pot avea -uri nesemnificative (vezi exemplul )
- ;
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 10 | |
| 2 | 10 | |
| 3 | 15 | |
| 4 | 15 | |
| 5 | 25 | |
| 6 | 25 |
Exemplul 1
factfact.in
1
101
factfact.out
0
Explicație
Deși poate fi format prin concatenarea lui cu , are un nesemnificativ și nu se consideră un număr corect matematic.
Exemplul 2
factfact.in
2
10
100000 11 12 16 26 107 24120 108 24120 22
factfact.out
24120
Explicație
Cel mai mare număr factfact este .
Exemplul 3
factfact.in
3
10
100000 11 12 16 26 107 24120 108 24120 22
factfact.out
2
Explicație
Cea mai lungă secvență formată doar din numere factfact care îl conțină pe este formată din ultimele numere.