Studenţii Facultăţii de Informatică din cadrul Universităţii din Cluj, au conceput roboţi care şterg praful, plantează copaci, pun gresie, servesc masa, etc. Botezat „Rosie“, robotul care şterge praful are două braţe ( — stâng şi — drept) pe care sunt montate nişte perii ce sunt învârtite cu ajutorul unui motoraş. Braţul robotului este programat să se poziţioneze în dreptul unei suprafeţe, periile învârtite de motoraş parcurg suprafaţa ştergând în acest fel praful de pe ea.
Pentru o demonstraţie, robotul este aşezat în faţa unei etajere cu rafturi numerotate în ordine, de jos în sus, cu numere de la la . Braţul stâng () al robotului este poziţionat în dreptul primului raft iar celălalt braţ () în dreptul celui de-al -lea raft.
Pentru ştergerea prafului, deplasarea braţelor robotului este programată astfel:
- fiecare braţ se deplasează doar de jos în sus, de la raftul în dreptul căruia este poziţionat la un moment dat, la raftul situat imediat deasupra acestuia;
- din minut în minut, se deplasează doar unul din braţe, se poziţionează în dreptul raftului corespunzător şi şterge praful de pe acesta;
- dacă ambele braţe ajung în dreptul aceluiaşi raft, atunci robotul se blochează şi demonstraţia se încheie fără succes.
Cerinţă
Ştiind că demonstraţia se termină în momentul în care braţul drept () al robotului a ajuns pe ultimul raft al etajerei, scrieţi un program care calculează numărul de modalităţi diferite în care poate fi programat robotul pentru a asigura succesul demonstraţiei. Programul va afişa restul împărţirii numărului la .
Date de intrare
Fişierul de intrare robot.in
conţine pe prima linie două numere naturale şi , în această ordine, separate printr-un spaţiu, având semnificaţia din enunţ.
Date de ieșire
În fişierul de ieșire robot.out
se va scrie pe prima linie un singur număr natural ce reprezintă restul împărţirii numărului la .
Restricții și precizări
- cele două braţe NU se pot mişca simultan;
- un braţ poate fi programat să se deplaseze în dreptul unui raft de pe care a fost deja şters praful;
- un mod de programare al robotului este definit printr-o succesiune de deplasări ale braţelor și ;
- două moduri de programare ale robotului sunt diferite dacă acestea au cel puţin o deplasare sau diferită.
Exemplu
robot.in
5 2
robot.out
5
Explicație
Cu am notat deplasarea brațului de la raftul la raftul .
Sunt modalităţi de programare a robotului pentru ca braţul drept să ajungă la ultimul raft:
- , , ;
- , , , ;
- , , , , ;
- , , , ;
- , , , , .