Twoja funkcja zmiany jest tak skomplikowana, że aż nie mam siły jej czytać tym bardziej, że się spieszę... w związku z tym garść ogólników, które może Ci się przydadzą 
Pamięć możesz w tym zadaniu wywalić na dwa sposoby. Primo, możesz wyjść poza tablicę. Jestem prawie pewien, że gargantuiczna funkcja zmiana ma za zadanie jakoś uporać się z tym problemem. Czy nie będzie jednak prościej użyć wartowników?
=====
=123=
=456=
=111=
=====
Tak zapisaną tablicę można dużo prościej analizować. Przelatujesz tą macierz jak chcesz, gdzie chcesz i kiedy chcesz a gdy dojdziesz do znaku = to kończysz działanie.
Secundo, programy nadesłane do tego zadania od co wywala rekurencja. SPOJ bardzo źle radzi sobie z rekurencją. I nie tylko SPOJ. Oczywiście tylko z taką, która jest źle zrobiona
Wyznaczanie liczb Fibonacciego rekurencją to wzorowy przykład sytuacji, gdy rekurencja jest baaardzo zła. (Jednocześnie z faktu, że w LO na matematyce bardzo często pojawia się ciag Fibonacciego jako rekurencyjna ciekawostka wynika co nieco o jakości nauczania w szkołach). Rekurencja ma po prostu taką cechę, że lubi rozwiązywać po raz n-ty ten sam problem. Drugą cechą rekurencji jest to, że rozwiązywanie wielu przypadków przez rekurencję zajmuje bardzo dużo pamięci. Mój rekord to konieczność resetu po zajęciu kilku giga RAMu na własnym kompie 