Загальний Покер#3771

Загальний Покер

30 секунд
64 мегабайти
Дуже складна

У вас є колода з N \times M карт. Кожна карта в колоді має ранг. Діапазон рангів — від до , і колода містить карт кожного рангу.

Карту з рангом ми позначаємо як .

Ви можете випадковим чином взяти руку з карт з колоди. Якщо рука відповідає заданому шаблону, нараховується бонус. Опис шаблону:

hand_pattern = card_pattern1 ' ' card_pattern2 ' ' ... ' ' card_patternL
card_pattern = '*' | var_plus
var_plus = variable | var_plus '+'
variable = 'a' | 'b' | 'c'

Рука відповідає hand_pattern, якщо кожен card_pattern у hand_pattern покриває окрему карту з руки.

card_pattern

Якщо card_pattern — зірочка ('*'), він підходить до будь-якої карти. Символи 'a', 'b' і 'c' позначають змінні, і всі входження однієї змінної покривають карти одного рангу. card_pattern зі змінною, після якої йде одна чи декілька '+' підходить до карт, де ранг дорівнює сумі базового рангу та кількості плюсів. Якщо в hand_pattern є card_pattern зі змінною і певною кількістю плюсів, він має містити і всі шаблони з меншою (включно з нулем) кількістю плюсів. Наприклад, якщо 'a+++' є у hand_pattern, то 'a', 'a+' і 'a++' також мають бути у hand_pattern.

Немає обмежень для того, яким рангам відповідають різні змінні. Наприклад, 'a' і 'b' можуть відповідати як одному, так і різним рангам.

Приклади hand_pattern. Шаблон

a * b a b

відповідає руці:

3 3 10 10 9

де 'a' і 'b' означають і (або і ). Цей шаблон також відповідає руці:

3 3 3 3 9

У цьому випадку і 'a', і 'b' означають . Шаблон

a a+ a++ a+++ a++++

відповідає руці:

4 5 6 7 8

Тут 'a' має означати .

Ваше завдання — написати програму, яка обчислює ймовірність, що випадково витягнена рука відповідає заданому hand_pattern.

Вхідні дані

Вхід — послідовність наборів даних. Формат кожного набору:

card\_pattern_1 card\_pattern_2 ... card\_pattern_L

Перший рядок містить три додатні цілі , , . — кількість карт кожного рангу, — кількість рангів, — кількість карт у руці. Обмеження:

1 \le N \le 71 \\ 1 \le M \le 60 \\ 1 \le L \le 7 \\ L \le N \times M

Другий рядок — опис hand_pattern.

Кінець введення позначається рядком з трьох нулів, розділених пробілом.

Вихідні дані

Для кожного набору даних виведіть у рядок десятковий дріб — ймовірність, що рука відповідає hand_pattern.

Похибка відповіді не повинна перевищувати 10^{-8}.

У відповіді не повинно бути інших символів.

Приклади

Приклад 1

Loading
Loading