Problem C
Neuralt Bakverk
Languages
en
sv
Arvid håller på att förbereda AI-olympiadens final. Det är mycket som behöver göras, fixa boende, fixa mat, fixa problem, och fixa fika till alla. Stressad som han är råkar Arvid blanda ihop de två sistnämnda uppgifterna. Som deltagare i AI-olympiaden måste du lösa det konstiga problemet som blev till.
Ett neuralt bakverk är en riktad graf med $N$ noder, vars funktion är att baka kakor. I början läggs $X$ enheter ingredienser på nod $1$, medan de andra noderna får noll ingredienser. Därefter sker följande varje sekund för varje nod:
-
Låt $a_v$ vara antalet ingredienser på nod $v$, och låt $d_v$ vara utgraden hos nod $v$.
-
Om $d_v = 0$ så händer ingenting. Annars, låt $a_v = d_v\cdot q + r$ där $0 \leq r < d_v$. Skicka sedan $q$ enheter ingredienser till var och en av noderna som $v$ pekar på, och behåll resterande $r$.
Med andra ord så delar varje nod upp ingredienserna lika så gått det går och skickar vidare. Varje sekund så sker allt detta samtidigt för alla noder, så det spelar ingen roll i vilken ordning som noderna betraktas.
De ingredienser som hamnar på nod $N$ är de färdiga kakorna. För att vara ett giltigt neuralt bakverk så får ingen nod peka på sig själv, eller peka på samma nod mer än en gång.
Du får givet heltalen $X$ och $Y$, och din uppgift är att bygga ett neuralt bakverk sådant att exakt $Y$ kakor bakas om $X$ enheter ingredienser används. Mer specifikt så kommer bakverket att köras i $10^4$ sekunder, och om nod $N$ då har $Y$ kakor så har du klarat testfallet. Du får poäng beroende på hur litet $N$ är.
Indata
Indatan består av en rad med två heltal $X$ och $Y$ ($1 \leq X,Y \leq 10^{18}$).
Utdata
Om det inte finns något neuralt bakverk som bakar $Y$ kakor med $X$ ingredienser, skriv ut $-1$.
Annars, skriv först ut en rad med två heltal $N,M$, antalet noder och kanter i ditt nätverk. Skriv därefter ut $M$ rader som var och en innehåller två heltal $u_i, v_i$ ($1 \leq u_i, v_i \leq N$), som indikerar att en kant går från nod $u_i$ till nod $v_i$.
Poängsättning
Det finns två testgrupper som poängsätts separat på följande sätt. Låt $N_{max}$ vara det maximala värdet på $N$ i ditt svar på något av testfallen i testgruppen. Om $N_{max} \leq 30$ så får du full poäng, annars ges poäng enligt formeln
\[ \frac{20 \cdot g}{N_{max} - 10} \]där $g$ är testgruppens poäng ($20$ respektive $80$). Om du svarar fel på något av testfallen, eller om $N_{max} \geq 200$, så får du noll poäng på testgruppen.
Grupp |
Poäng |
Gränser |
$1$ |
$20$ |
$X,Y \leq 20$ |
$2$ |
$80$ |
Inga ytterligare begränsningar. |
Sample Input 1 | Sample Output 1 |
---|---|
15 4 |
8 10 1 2 2 3 3 4 4 2 1 4 1 5 5 6 5 7 6 8 7 8 |
Sample Input 2 | Sample Output 2 |
---|---|
1 2 |
-1 |