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

, где

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

-й кучке и

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

,

и

для всех

.
Пусть

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

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

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

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

, для которой

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

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

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

мы имеем

, а для

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

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

, то положим

2) если

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

, что

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

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

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

и для всех

выполняется

, то положим

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

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

вектор

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

.
Пусть

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

на

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

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

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

и

, что

и

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

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

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

, а значит и

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

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

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

и

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