Alex Fox это количество числе в таблице?
Ну - да, я имел ввиду количество строк.
1.Ваша задача еще напоминает классическую комбинаторную:"сколько маршрутов кратчайшей длины идет из левого нижнего угла шахматной доски в правый верхний угол?" (идем по соседним по стороне клеткам). Ответ - такой же:
![$C^7_{7+7}$ $C^7_{7+7}$](https://dxdy-03.korotkov.co.uk/f/e/e/1/ee1b786cbaa580517ce14af22162557182.png)
. Потому что маршрут кодируется буквами П (вправо) и В (вверх). У Вас - то же самое: если в начале каждой строки приписать -чисто для кайфа - 0, а в конце -
![$m$ $m$](https://dxdy-01.korotkov.co.uk/f/0/e/5/0e51a2dede42189d77627c4d742822c382.png)
, то символы в строке будут меняться в точности от 0 до
![$m$ $m$](https://dxdy-01.korotkov.co.uk/f/0/e/5/0e51a2dede42189d77627c4d742822c382.png)
, и соответствующий маршрут на карте выглядит так: шагаем вверх (В) столько раз, на сколько отличаются символы в соседних местах вашей строки, ставим П, и т.д. Например, для строки 023 код будет такой : ПВВПВП... Опять же, эта кодировка делается совсем понятной, если вспомнить про метод "шары-перегородки" для задачи о сочетаниях с повторениями; П - это перегородки, ВВ..В - сколько шаров в соответствующем ящике. Может, эта геометрическая (или комбинаторная ))интерпретация будет вам полезна.
2. Вообше то в вашей постановке задачи , используется
лексикографический порядок (а способ нумерации, предложенный
svv - универсальный способ составления словаря челом, который не хочет заранее ограничивать себя количеством используемых букв ). Эта тематика - составление словарей и разработка прямого доступа к ним - наверняка классиками-программистами изучалась...
3. Аварийное завершение может происходить из-за факториалов больших чисел. Так не считайте биноминальные к-ты по этим формулам, а используйте рекуррентные (соседние бин.к-ты связаны совсем просто - получаются друг из друга домножением/делением на пару чисел) - тем более, что вам все равно нужно будет их отслеживать.