TOTALОбратимость ходов - нетривиальная часть задачи.
Я скоро набросаю доказательство.
-- Mon Jun 01, 2009 02:35:13 --Доказательство.
Позицией назовем вектор 

, где 

 количество карт в 

-й кучке и 

 - номер кучки из которой предстоит сделать ход, причем  

, 

 и 

 для всех 

.
Пусть 

 - это функция, которая позицию 

 переводит в новую позицию, раскидывая карты из кучки 

 согласно правилам.
Докажем, что для каждой позиции 

 найдется по крайней мере одна позиция 

, для которой 

. Рассмотрим в 

 кучки с минимальным количеством карт, а среди них самую левую - пусть ее номер равен 

 (таким образом, для 

 мы имеем 

, а для 

 - соответственно 

).
Возможны следующие случаи:
1) Если 

, то положим

2) если 

 и существует такое 

, что 

, то переопределим 

 равным минимальному такому 

, попадая таким образом в случай 1) рассмотренный выше;
3) если 

 и для всех 

 выполняется 

, то положим

Обозначим это построение через 

. Для заданной позиции 

 вектор 

 также является позицией. Причем, как нетрудно проверить, 

.
Пусть 

 - произвольная позиция. Рассматривая последовательные итерации 

 на 

, из конечности числа различных позиций, заключаем, что либо 

 для некоторого натурального 

, либо существует такие неотрицательные целые числа 

 и 

, что 

 и 

. Второй вариант, однако, невозможен, так как в нем получается противоречие:

Итак, получаем, что 

 для некоторого натурального 

, а значит и 

, то есть начав с произвольной позиции 

 мы обязаны в нее же и вернуться при итерациях 

. 
Другими словами, мы доказали, что 

 и 

 являются взаимно-обратными перестановками на множестве позиций.