糟糕!在玩了几个月的桌面角色扮演游戏《Bungalows & Banshees》后,你的角色不小心触发了一个陷阱,被一块巨大的滚动巨石压扁了。如果你当时在那个敏捷豁免检定中成功躲开了那块该死的巨石……
你总是沉溺于过去,开始思考你在豁免检定中成功的几率到底是多少,并发现这并不显而易见——你有吟游诗人的灵感加成,获得了一个 $d6$ 的奖励,但因为喝醉了,你在投掷时处于劣势,但另一方面,你的敏捷豁免修正值相当高……
一个难度为 $d$ 的基础敏捷豁免检定执行方式如下:首先,投掷一个 $d20$(即 20 面骰子)。如果投掷结果为 1,则立即失败;如果结果为 20,则立即成功。否则,将角色的敏捷(DEX)豁免修正值 $m$ 加到骰子结果上。如果总和至少为难度 $d$,则结果为成功,否则为失败。
对此有两个扩展规则。首先,投掷可能带有优势或劣势。在这种情况下,投掷两个 $d20$ 而不是一个,然后只保留最高值(优势)或最低值(劣势),并按照基础情况计算结果。其次,投掷可能带有额外的奖励或惩罚,形式为额外的骰子,这些骰子在与 $d$ 比较之前被投掷并加到或减去 $d20$ 的结果中(但无论是否有优势或劣势,这些奖励/惩罚骰子只投掷一次)。
编写一个程序,给定豁免检定的数据(难度、DEX 豁免修正值、优势/劣势状态以及额外的奖励骰子),计算豁免检定成功的概率。
输入格式
输入包含三行。第一行包含两个整数 $d$ 和 $m$ ($0 \le d \le 30, -10 \le m \le 10$),分别表示投掷难度和角色的 DEX 豁免修正值。第二行包含一个单词,指示投掷是否有优势或劣势。该单词为 “straight”(表示既无优势也无劣势的普通投掷)、“advantage” 或 “disadvantage”。最后,第三行以一个整数 $k$ ($0 \le k \le 5$) 开头,表示额外奖励/惩罚骰子的数量。随后是 $k$ 个骰子描述,每个形式为 “[+-]dx” ($3 \le x \le 10$ 为整数),表示将一个 $x$ 面骰子的结果加(如果是 ‘+’)或减(如果是 ‘-’)到结果中。
输出格式
输出一个数字,即敏捷豁免检定成功的概率。该数字的绝对误差应不超过 $10^{-6}$。
样例
样例输入 1
12 4 straight 0
样例输出 1
0.65
样例输入 2
10 3 advantage 0
样例输出 2
0.91
样例输入 3
20 7 disadvantage 2 +d6 -d4
样例输出 3
0.212916667