У нас есть две кучки шаров:
белых и
черных. Мы выкладываем какую-то последовательность шаров, причем можем использовать их не все, а только часть. Допустим, мы взяли некоторую последовательность, при этом у нас осталось неиспользованными
белых и
черных. Для того, чтобы было проще подсчитать варианты, мы хотим использовать все имеющиеся шары, но при этом так, чтобы была возможность однозначно восстановить нашу последовательность.
Добавим все белые в конец, а все черные - в начало. Но чтобы иметь возможность обратно восстановить исходную последовательность, нужно уметь как-то понять, сколько шаров мы добавили. Нужны какие-то разделители между исходной доследовательностью и тем, что мы добавили. В качестве этих разделителей естественно использовать по одному дополнительному шару, отделив одним черным лишние белые, и отделив одним белым лишние черные.
Две лишние комбинации, которые нужно вычесть, получаются так. Во-первых, при нашем способе построения добавленный в качестве разделителя белый шар гарантированно лежит левее добавленного в качестве разделителя черного шара. Поэтому длинная последовательность, в которой слева лежат все черные, а справа - все белые, является невозможной, и ее надо вычесть. Все остальные последовательности являются возможными, но одна из них (полученная из невозможной перестановкой двух соседних белого и черного шара) соответствует пустой исходной последовательности, которая в условии задачи, поэтому ее тоже надо вычесть.
Можно было бы, кстати, добавлять шары немного иначе, а именно: все в конец.
(детали второго способа)
Если исходная последовательность заканчивается белым шаром, то кладем после него все лишние черные, а затем - все лишние белые, иначе наоборот. В каждую из этих двух групп добавляем по одному дополнительному шару, чтобы они были непустыми. Ну или можно их использорвать в качестве разделителей. Детали по-разному строить можно, суть одна.