diff --git a/基础教程/A7-强化学习/draft/三门问题/ThreeDoors.py b/基础教程/A7-强化学习/draft/三门问题/ThreeDoors.py index 4ce00fbb..9da0b08b 100644 --- a/基础教程/A7-强化学习/draft/三门问题/ThreeDoors.py +++ b/基础教程/A7-强化学习/draft/三门问题/ThreeDoors.py @@ -32,16 +32,23 @@ def try_once(n_doors: int): return no_change_but_win, win_after_change -if __name__ == "__main__": + +def try_n_doors(n_doors): total = 100000 - n_doors = 8 n_win_0 = 0 n_win_1 = 0 for i in range(total): no_change_but_win, win_after_change = try_once(n_doors) n_win_0 += win_after_change n_win_1 += no_change_but_win - + print(str.format("{0}扇门:", n_doors)) print(n_win_0, n_win_1) - print(str.format("更换选择而中奖的概率={0} \n不更换而中奖的概率={1}", + print(str.format("更换选择而中奖的概率={0} \n不换选择而中奖的概率={1}", n_win_0/total, n_win_1/total)) + +if __name__ == "__main__": + n_doors = 3 + try_n_doors(n_doors) + + n_doors = 8 + try_n_doors(n_doors) diff --git a/基础教程/A7-强化学习/draft/三门问题/images/ThreeDoors2.png b/基础教程/A7-强化学习/draft/三门问题/images/ThreeDoors2.png deleted file mode 100644 index 0ab40912..00000000 Binary files a/基础教程/A7-强化学习/draft/三门问题/images/ThreeDoors2.png and /dev/null differ diff --git a/基础教程/A7-强化学习/draft/三门问题/images/ThreeDoors1.png b/基础教程/A7-强化学习/draft/三门问题/img/ThreeDoors1.png similarity index 100% rename from 基础教程/A7-强化学习/draft/三门问题/images/ThreeDoors1.png rename to 基础教程/A7-强化学习/draft/三门问题/img/ThreeDoors1.png diff --git a/基础教程/A7-强化学习/draft/三门问题/img/ThreeDoors2.png b/基础教程/A7-强化学习/draft/三门问题/img/ThreeDoors2.png new file mode 100644 index 00000000..661981ac Binary files /dev/null and b/基础教程/A7-强化学习/draft/三门问题/img/ThreeDoors2.png differ diff --git a/基础教程/A7-强化学习/draft/三门问题/三门问题.md b/基础教程/A7-强化学习/draft/三门问题/三门问题.md index 57528428..ccb5b985 100644 --- a/基础教程/A7-强化学习/draft/三门问题/三门问题.md +++ b/基础教程/A7-强化学习/draft/三门问题/三门问题.md @@ -6,7 +6,7 @@ 参赛者面前有三扇关闭着的门,其中一扇的后面是一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,主持人会开启剩下两扇门中的一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率? - + 图1 @@ -102,7 +102,7 @@ 另外,有些读者看表格可能有困难,所以我们把这些情况变成概率数字放在图 2 中。 - + 图 2 @@ -263,7 +263,7 @@ if __name__ == "__main__": ``` 66259 33741 更换选择而中奖的概率=0.66259 -不更换而中奖的概率=0.33741 +不换选择而中奖的概率=0.33741 ``` 更换选择中奖的概率约等于 $\frac{2}{3}$,不更换选择中奖的概率约等于 $\frac{1}{3}$,与穷举法和理论推导结论一致。 @@ -273,7 +273,7 @@ if __name__ == "__main__": ``` 14554 12480 更换选择而中奖的概率=0.14554 -不更换而中奖的概率=0.1248 +不换选择而中奖的概率=0.1248 ``` 比如当 n_doors=8 时,按公式 2,结果是 $0.1248 \approx \frac{1}{8}$;按公式 3,结果是 $0.14554 \approx \frac{8-1}{8 \times (8-2)}=\frac{7}{48}$。 @@ -288,4 +288,4 @@ if __name__ == "__main__": 1. 强化学习中,基于模型的理论部分,也是以概率论为基础的,可以先热复习一下热身。 2. 图 2 中,其实是由“策略-动作-状态”组成的,这与强化学习的理论基本一致。 3. 使用代码模拟,也是一种“聪明的笨办法”,利用计算机快速模拟实际环境的交互,这也是强化学习的重要方法。 -4. 用代码理解公式及理论知识,是程序员的一种重要技能。 +4. 对于没有受过训练的可以直接阅读并理解公式推导的读者来说,用代码理解公式及理论知识,是一种重要手段。 diff --git a/基础教程/A7-强化学习/draft/概率图问题/CarData.txt b/基础教程/A7-强化学习/draft/概率图问题/CarData.txt new file mode 100644 index 00000000..3a32c7cc --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/CarData.txt @@ -0,0 +1 @@ +["B", "A", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "C", "B", "A", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "C", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "A", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "C", "C", "B", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "D", "C", "B", "C", "C", "B", "A", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "A", "D", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "B", "C", "C", "B", "A", "B", "A", "D", "D", "D", "C", "C", "B", "A", "A", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "A", "D", "B", "A", "D", "C", "C", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "A", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "B", "C", "B", "C", "C", "B", "A", "A", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "B", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "D", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "A", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "A", "A", "D", "D", "D", "C", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "C", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "C", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "C", "B", "C", "B", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "D", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "C", "C", "B", "C", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "C", "C", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "D", "D", "D", "C", "C", "B", "A", "A", "A", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "C", "B", "A", "D", "D", "C", "C", "B", "A", "A", "D", "D", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "A", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "C", "C", "B", "C", "B", "A", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "C", "B", "A", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "A", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "A", "D", "B", "C", "B", "A", "D", "B", "C", "C", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "C", "B", "C", "C", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "A", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "A", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "A", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "A", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "A", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "A", "B", "A", "A", "A", "B", "A", "D", "D", "B", "A", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "A", "B", "A", "D", "D", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "B", "C", "B", "A", "A", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "D", "B", "A", "B", "C", "C", "B", "A", "A", "D", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "A", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "C", "C", "B", "A", "B", "C", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "C", "C", "C", "B", "A", "D", "D", "D", "C", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "C", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "C", "B", "C", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "C", "C", "C", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "C", "B", "A", "B", "C", "B", "A", "B", "A", "A", "D", "D", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "A", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "A", "A", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "D", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "A", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "D", "D", "C", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "A", "D", "B", "A", "B", "A", "D", "C", "B", "C", "C", "B", "A", "A", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "C", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "A", "D", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "A", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "A", "B", "A", "B", "A", "A", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "B", "A", "B", "A", "A", "D", "C", "B", "C", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "A", "B", "C", "C", "B", "C", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "C", "C", "B", "A", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "A", "B", "A", "B", "C", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "C", "C", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "C", "C", "C", "B", "A", "A", "D", "D", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "B", "A", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "B", "A", "B", "A", "B", "C", "C", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "A", "B", "C", "B", "C", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "B", "C", "C", "B", "C", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "C", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "C", "C", "B", "A", "A", "D", "B", "A", "B", "A", "A", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "D", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "C", "C", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "D", "C", "C", "B", "A", "A", "B", "A", "B", "A", "B", "A", "B", "A", "A", "A", "D", "B", "A", "B", "C", "B", "A", "A", "B", "A", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "B", "C", "C", "B", "A", "D", "D", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "A", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "D", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "C", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "A", "A", "A", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "A", "D", "D", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "D", "D", "D", "C", "B", "A", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "A", "D", "C", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "D", "B", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "B", "C", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "A", "A", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "D", "B", "A", "A", "D", "D", "B", "A", "D", "D", "B", "A", "A", "D", "B", "C", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "C", "B", "A", "B", "C", "C", "B", "A", "B", "A", "B", "C", "B", "A", "A", "D", "B", "A", "A", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "A", "D", "D", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "B", "A", "A", "D", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "A", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "B", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "D", "D", "C", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "A", "B", "C", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "A", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "A", "D", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "A", "B", "A", "D", "C", "B", "C", "B", "A", "A", "A", "B", "A", "D", "B", "A", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "C", "B", "A", "B", "A", "A", "B", "C", "B", "A", "B", "A", "A", "D", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "A", "D", "C", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "C", "B", "A", "A", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "A", "D", "B", "A", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D"] \ No newline at end of file diff --git a/基础教程/A7-强化学习/draft/概率图问题/CarData_backup.txt b/基础教程/A7-强化学习/draft/概率图问题/CarData_backup.txt new file mode 100644 index 00000000..3a32c7cc --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/CarData_backup.txt @@ -0,0 +1 @@ +["B", "A", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "C", "B", "A", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "C", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "A", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "C", "C", "B", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "D", "C", "B", "C", "C", "B", "A", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "A", "D", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "B", "C", "C", "B", "A", "B", "A", "D", "D", "D", "C", "C", "B", "A", "A", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "A", "D", "B", "A", "D", "C", "C", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "A", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "B", "C", "B", "C", "C", "B", "A", "A", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "B", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "D", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "A", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "A", "A", "D", "D", "D", "C", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "C", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "C", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "C", "B", "C", "B", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "D", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "C", "C", "B", "C", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "C", "C", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "D", "D", "D", "C", "C", "B", "A", "A", "A", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "C", "B", "A", "D", "D", "C", "C", "B", "A", "A", "D", "D", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "A", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "C", "C", "B", "C", "B", "A", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "C", "B", "A", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "A", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "A", "D", "B", "C", "B", "A", "D", "B", "C", "C", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "C", "B", "C", "C", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "A", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "A", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "A", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "A", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "A", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "A", "B", "A", "A", "A", "B", "A", "D", "D", "B", "A", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "A", "B", "A", "D", "D", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "B", "C", "B", "A", "A", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "D", "B", "A", "B", "C", "C", "B", "A", "A", "D", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "A", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "C", "C", "B", "A", "B", "C", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "C", "C", "C", "B", "A", "D", "D", "D", "C", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "C", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "C", "B", "C", "B", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "C", "C", "C", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "C", "B", "A", "B", "C", "B", "A", "B", "A", "A", "D", "D", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "A", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "A", "A", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "D", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "A", "A", "D", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "D", "D", "C", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "A", "D", "B", "A", "B", "A", "D", "C", "B", "C", "C", "B", "A", "A", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "A", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "C", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "A", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "C", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "A", "D", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "A", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "B", "A", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "A", "B", "A", "B", "A", "A", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "A", "D", "C", "B", "A", "B", "A", "A", "D", "C", "B", "C", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "A", "B", "C", "C", "B", "C", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "C", "C", "B", "A", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "A", "B", "A", "B", "C", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "C", "C", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "B", "C", "C", "C", "B", "A", "A", "D", "D", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "D", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "B", "A", "A", "D", "D", "D", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "C", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "B", "A", "B", "A", "B", "C", "C", "B", "A", "B", "A", "D", "B", "C", "B", "C", "B", "C", "B", "A", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "A", "B", "C", "B", "C", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "D", "B", "C", "C", "B", "C", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "C", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "C", "C", "B", "A", "A", "D", "B", "A", "B", "A", "A", "B", "A", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "D", "B", "A", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "C", "C", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "A", "D", "D", "C", "B", "C", "C", "B", "A", "D", "D", "D", "C", "C", "B", "A", "A", "B", "A", "B", "A", "B", "A", "B", "A", "A", "A", "D", "B", "A", "B", "C", "B", "A", "A", "B", "A", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "C", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "C", "B", "A", "B", "A", "D", "B", "C", "C", "B", "A", "D", "D", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "A", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "D", "B", "C", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "D", "D", "B", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "C", "C", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "C", "C", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "A", "A", "A", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "A", "D", "D", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "D", "D", "D", "C", "B", "A", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "D", "B", "C", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "C", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "A", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "B", "A", "A", "D", "C", "C", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "A", "D", "D", "B", "C", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "B", "A", "A", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "B", "C", "C", "B", "A", "D", "D", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "D", "D", "D", "D", "C", "B", "C", "B", "A", "D", "B", "A", "A", "D", "B", "A", "D", "B", "A", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "C", "C", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "D", "C", "C", "B", "A", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "A", "B", "A", "D", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "B", "A", "D", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "A", "A", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "A", "D", "D", "B", "A", "A", "D", "D", "B", "A", "D", "D", "B", "A", "A", "D", "B", "C", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "A", "B", "C", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "D", "B", "A", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "C", "B", "C", "B", "C", "B", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "C", "C", "B", "A", "B", "C", "C", "B", "A", "B", "A", "B", "C", "B", "A", "A", "D", "B", "A", "A", "B", "A", "D", "D", "D", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "D", "B", "C", "B", "A", "B", "A", "B", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "A", "D", "D", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "A", "B", "A", "B", "A", "A", "D", "B", "A", "D", "B", "A", "A", "D", "D", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "C", "C", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "D", "D", "B", "A", "D", "D", "D", "D", "B", "A", "B", "C", "B", "C", "B", "C", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "D", "B", "A", "D", "D", "D", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "B", "A", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "C", "C", "B", "A", "D", "C", "C", "B", "A", "D", "D", "D", "B", "A", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "B", "A", "D", "C", "C", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "B", "A", "D", "B", "A", "D", "D", "B", "A", "A", "A", "D", "D", "D", "B", "A", "B", "C", "B", "A", "B", "C", "B", "A", "B", "C", "B", "C", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "D", "D", "D", "D", "C", "B", "C", "B", "A", "B", "A", "B", "A", "A", "D", "B", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "C", "C", "B", "A", "D", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "D", "B", "C", "B", "A", "D", "D", "D", "D", "D", "C", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "A", "A", "B", "C", "C", "B", "A", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "C", "B", "A", "A", "A", "D", "C", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "A", "D", "C", "B", "A", "D", "D", "B", "A", "D", "C", "B", "C", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "B", "A", "D", "D", "B", "A", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "B", "A", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "D", "B", "A", "A", "D", "D", "D", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "A", "A", "B", "A", "D", "C", "B", "C", "B", "A", "A", "A", "B", "A", "D", "B", "A", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "D", "D", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "B", "A", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "D", "D", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "D", "B", "C", "B", "A", "D", "C", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "C", "B", "A", "B", "A", "B", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "D", "D", "D", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "A", "D", "C", "B", "A", "D", "B", "A", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "B", "A", "D", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "C", "B", "A", "B", "A", "A", "B", "C", "B", "A", "B", "A", "A", "D", "D", "B", "A", "B", "A", "D", "B", "C", "B", "A", "A", "D", "C", "B", "A", "A", "D", "C", "C", "B", "A", "D", "D", "D", "C", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "D", "B", "A", "B", "A", "B", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "C", "B", "A", "B", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "C", "B", "A", "D", "D", "D", "B", "C", "B", "A", "D", "B", "A", "B", "C", "B", "A", "D", "C", "B", "C", "B", "C", "B", "C", "B", "C", "B", "A", "A", "D", "D", "D", "B", "A", "D", "C", "B", "A", "D", "D", "D", "D", "C", "B", "A", "B", "A", "D", "D", "B", "A", "D", "C", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "D", "C", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D", "C", "B", "A", "A", "D", "B", "A", "D", "D", "D", "C", "B", "C", "C", "B", "A", "D", "C", "B", "A", "B", "A", "D", "D", "C", "B", "A", "D", "D", "B", "A", "D", "B", "C", "B", "A", "B", "A", "D", "C", "C", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "D", "C", "B", "A", "B", "A", "B", "A", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "A", "A", "D", "B", "A", "B", "A", "D", "D", "B", "A", "B", "C", "B", "A", "D", "D", "B", "A", "B", "A", "D", "D", "C", "B", "C", "B", "C", "B", "A", "D", "B", "A", "B", "A", "D", "C", "B", "C", "B", "C", "B", "A", "A", "D", "B", "C", "B", "C", "B", "A", "D", "C", "B", "A", "D", "B", "A", "D", "D", "C", "B", "A", "D", "D", "D"] \ No newline at end of file diff --git a/基础教程/A7-强化学习/draft/概率图问题/RentCar-0-GenerateData.py b/基础教程/A7-强化学习/draft/概率图问题/RentCar-0-GenerateData.py new file mode 100644 index 00000000..4df1fc30 --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/RentCar-0-GenerateData.py @@ -0,0 +1,51 @@ +import numpy as np +import os +import json + +# 作为目标的转移概率矩阵 +P = np.array([ + [0.1, 0.3, 0.0, 0.6], + [0.8, 0.0, 0.2, 0.0], + [0.0, 0.9, 0.1, 0.0], + [0.0, 0.3, 0.3, 0.4] +]) + +# 采样 +def sample(n_samples, n_states, start_state): + states = [i for i in range(n_states)] + # 状态转移序列 + X = [] + # 开始采样 + X.append(start_state) + current = start_state + for i in range(n_samples): + next = np.random.choice(states, p=P[current]) + X.append(next) + current = next + #endfor + return X + +def save_file(X, file_name): + # 把0123变成ABCD + Y = [chr(x+65) for x in X] + #print(Y) + # 保存Y到文件 + json_list = json.dumps(Y) + file = open(file_name, "w") + file.write(json_list) + file.close() + + +if __name__ == "__main__": + # 采样数量 + n_samples = 10000 + # 状态空间 + n_states = 4 + # 起始状态(从0开始) + start_state = 1 + X = sample(n_samples, n_states, start_state) + #print(X) + # 保存文件 + root = os.path.split(os.path.realpath(__file__))[0] + file_name = os.path.join(root, "CarData.txt") + save_file(X, file_name) diff --git a/基础教程/A7-强化学习/draft/概率图问题/RentCar-1-A-B.py b/基础教程/A7-强化学习/draft/概率图问题/RentCar-1-A-B.py new file mode 100644 index 00000000..c9e4b1bb --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/RentCar-1-A-B.py @@ -0,0 +1,35 @@ +import numpy as np +import json +import os + +# 计算从a_i转移到a_j的概率 +def calculate_P(X, a_i, a_j): + n_i = 0 + n_j = 0 + for x in range(len(X)-1): + if a_i == X[x]: + n_i += 1 + if a_j == X[x+1]: + n_j += 1 + print(n_i, n_j, n_j/n_i) + +def open_file(file_name): + file = open(file_name, "r") + lines = file.read() + file.close() + data_list = json.loads(lines) + return data_list + +if __name__ == "__main__": + # 状态空间 + n_states = 4 + # 读取文件 + root = os.path.split(os.path.realpath(__file__))[0] + file_name = os.path.join(root, "CarData.txt") + data_list = open_file(file_name) + # 把 ABCD 变成 0123 + X = [ord(x)-65 for x in data_list] + # 计算转移矩阵 + calculate_P(X, 0, 1) # 1代表B店,0代表A店 + + diff --git a/基础教程/A7-强化学习/draft/概率图问题/RentCar-2-Matrix.py b/基础教程/A7-强化学习/draft/概率图问题/RentCar-2-Matrix.py new file mode 100644 index 00000000..d9bca7d9 --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/RentCar-2-Matrix.py @@ -0,0 +1,37 @@ +import numpy as np +import json +import os + +def calculate_Matrix(n_states, X): + P_counter = np.zeros((n_states, n_states)) + for i in range(len(X)-1): + a_i = X[i] + a_j = X[i+1] + P_counter[a_i, a_j] += 1 + #endfor + # 计算各列之和 + sum = np.sum(P_counter, axis=1, keepdims=True) + print("各个状态出现的次数:\n",sum) + P = P_counter / sum + return P + +def open_file(file_name): + file = open(file_name, "r") + lines = file.read() + file.close() + data_list = json.loads(lines) + return data_list + +if __name__ == "__main__": + # 状态空间 + n_states = 4 + # 读取文件 + root = os.path.split(os.path.realpath(__file__))[0] + file_name = os.path.join(root, "CarData.txt") + data_list = open_file(file_name) + # 把 ABCD 变成 0123 + X = [ord(x)-65 for x in data_list] + # 计算转移矩阵 + P = calculate_Matrix(n_states, X) + print("概率转移矩阵:") + print(np.around(P, 1)) diff --git a/基础教程/A7-强化学习/draft/概率图问题/RentCar-3-OneStep.py b/基础教程/A7-强化学习/draft/概率图问题/RentCar-3-OneStep.py new file mode 100644 index 00000000..363ea77c --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/RentCar-3-OneStep.py @@ -0,0 +1,19 @@ +import numpy as np + +P = np.array([ + [0.1, 0.3, 0.0, 0.6], + [0.8, 0.0, 0.2, 0.0], + [0.0, 0.9, 0.1, 0.0], + [0.0, 0.3, 0.3, 0.4] +]) + +def calculate_day(X, P, day): + X_curr = X.copy() + for i in range(day): + print(str.format("day {0}: {1} ", i, X_curr)) + X_next = np.dot(X_curr, P) + X_curr = X_next.copy() + +if __name__=="__main__": + X = np.array([0,1,0,0]) + calculate_day(X, P, 6) diff --git a/基础教程/A7-强化学习/draft/概率图问题/RentCar-4-KStep.py b/基础教程/A7-强化学习/draft/概率图问题/RentCar-4-KStep.py new file mode 100644 index 00000000..3b7c76e8 --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/RentCar-4-KStep.py @@ -0,0 +1,23 @@ +import numpy as np + +P = np.array([ + [0.1, 0.3, 0.0, 0.6], + [0.8, 0.0, 0.2, 0.0], + [0.0, 0.9, 0.1, 0.0], + [0.0, 0.3, 0.3, 0.4] +]) + +# 计算K步转移概率矩阵 +def K_step_matrix(P, K): + Pk=P.copy() + for i in range(K-1): + Pk=np.dot(P,Pk) + #print(Pk) + return Pk + +if __name__=="__main__": + X = np.array([0,1,0,0]) + P5 = K_step_matrix(P, 5) + print("5步转移矩阵:\n", P5) + X5 = np.dot(X, P5) + print("第 5 天的情况:", X5) diff --git a/基础教程/A7-强化学习/draft/概率图问题/RentCar-5-Convergence.py b/基础教程/A7-强化学习/draft/概率图问题/RentCar-5-Convergence.py new file mode 100644 index 00000000..494ef211 --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/RentCar-5-Convergence.py @@ -0,0 +1,22 @@ +import numpy as np + +P = np.array([ + [0.1, 0.3, 0.0, 0.6], + [0.8, 0.0, 0.2, 0.0], + [0.0, 0.9, 0.1, 0.0], + [0.0, 0.3, 0.3, 0.4] +]) + +def Check_Convergence(P): + P_curr = P.copy() + for i in range(100000): + P_next=np.dot(P,P_curr) + print("迭代次数 =",i+1) + print(P_next) + if np.allclose(P_curr, P_next): + break + P_curr = P_next + return P_next + +if __name__=="__main__": + Pn = Check_Convergence(P) diff --git a/基础教程/A7-强化学习/draft/概率图问题/img/Car1.png b/基础教程/A7-强化学习/draft/概率图问题/img/Car1.png new file mode 100644 index 00000000..326c5b39 Binary files /dev/null and b/基础教程/A7-强化学习/draft/概率图问题/img/Car1.png differ diff --git a/基础教程/A7-强化学习/draft/概率图问题/img/Car2.png b/基础教程/A7-强化学习/draft/概率图问题/img/Car2.png new file mode 100644 index 00000000..40fcef82 Binary files /dev/null and b/基础教程/A7-强化学习/draft/概率图问题/img/Car2.png differ diff --git a/基础教程/A7-强化学习/draft/概率图问题/租车问题.md b/基础教程/A7-强化学习/draft/概率图问题/租车问题.md new file mode 100644 index 00000000..36409cbd --- /dev/null +++ b/基础教程/A7-强化学习/draft/概率图问题/租车问题.md @@ -0,0 +1,439 @@ + + +## 租车问题 + +### 1 提出问题 + +在北京有一个叫做“四通八达”的租车连锁公司,在海淀区、朝阳区、通州区、丰台区开设了 4 个门店,编号分别为 A,B,C,D。客户可以从任意一个店租车,用完后可以归还到任意一个店。为了简化问题,我们假设客户都是早晨租车开走,晚上归还。 + +为了招徕顾客,公司特地买了一辆高档宝驴车,以普通价格出租。公司经理想知道如果有一天这辆车从B号店出租了,2 天后的早晨会最有可能在哪个店出现?5 天后又会如何? + +公司统计了去年全年的租车、还车记录,抽样以后发现车辆在四个店的流动情况是这样的: + +``` +["B", "A", "A", "D", "D", "C", "B", "A",......] +``` + +数据序列的含义是,有一辆车: + +- 第一天从B店被租走,晚上还到A店; +- 第二天从A店被租走,晚上还到A店; +- 第三天从A店被租走,晚上还到D店; +- 第四天从D店被租走,晚上还到D店; +- 第五天从D店被租走,晚上还到C店; +- ...... + +序列中一共是10000条记录,可以认为是100辆车在100天内的借还地点数据的集合。这其中有什么规律呢? + +其实这是一个标准的**转移概率**的问题。 + +### 2 转移概率 +   +转移概率是马尔可夫链中的重要概念,若马氏链分为 m 个状态组成(在本例中 $m=4$),历史数据统计是由这 m 个状态所组成的序列。从任意一个状态出发,经过任意一次转移,必然出现状态 $1,2,……,m$ 中的一个,这种状态之间的转移称为转移概率。 + +在本问题中,有 4 个门店,所以一共就有 4 个状态。 + +如何根据历史数据计算出转移概率呢?其实就是条件概率: +$$ +P(A|B)=\frac{P(A,B)}{P(B)} \tag{1} +$$ + +具体到本问题中,公式如下: + +$$ +P_{i,j}=\Pr\{X_{t+1}=a_j|X_t = a_i\}=\frac{\Pr\{X_{t+1}=a_j,X_t=a_i\}}{\Pr\{X_t=a_i\}}=\frac{a_j在a_i后出现的次数}{a_i出现的总次数} \tag{2} +$$ + +公式 2 的含义是,在某一时刻 $t$,处于 $a_i$ 状态时,下一个时刻 $t+1$ 时,转移到 $a_j$ 状态的概率。 + +比较公式 2 和 1,形式上是完全相同的,只是里面的变量更具体化一些。 + +用上面的具体数据举例说明,如果我们想统计从 A 店租车,在 B 店还车的概率,应该这样做: + +1. 设置两个计数器,一个 $nA = 0$,一个 $nB = 0$; +1. 在上述序列数据中先找到所有的 A,出现一次就记录 $nA = nA+1$,假设一共出现 1000 次; +2. 再找到紧接着 A 后面出现的 B,如果有,则计数器 $nB=nB+1$,假设一共 110 次; + - 如果是 ['A','B','C'] 的顺序,则 $nA$ 计数,$nB$ 也计数。 + - 如果是 ['A','C','B'] 的顺序,中间有个'C',则 $nA$ 计数,$nB$ 不计数。 +3. 所有数据都统计完后计算:$P_{A,B} = \frac{nB}{nA}=\frac{110}{1000}=0.11$ + +```Python +# 计算从a_i转移到a_j的概率 +def calculate_P(X, a_i, a_j): + n_i = 0 + n_j = 0 + for x in range(len(X)-1): + if a_i == X[x]: + n_i += 1 + if a_j == X[x+1]: + n_j += 1 + print(n_i, n_j, n_j/n_i) +#end def +calculate_P(X, 0, 1) # 0代表A店, 1代表B店 +``` +``` +[Out] +2703 819 0.3029966703662597 +``` +上述代码统计出 A 店一共出现 2703 次,B 紧接在 A 后出现 819 次,所以 $P_{A,B}=\frac{819}{2703}\approx 0.3$。 + +同理可以统计出所有的转移概率,以 A 店为例: + +- 从A号店租车后 + - 还到A号店的概率是0.1 + - 还到B号店的概率是0.3 + - 还到C号店的概率是0.0 + - 还到D号店的概率是0.6 + +当然,也统计了从 B,C,D 店租车还车的记录,绘制在图 1 中,避免赘述。 + + + +图 1 + +### 3 解决经理的问题 + +重复一下需求:公司经理想知道如果有一天(命名为第 0 天)这辆车从 B 号店出租了,2 天后的早晨会最有可能在哪个店出现?5 天后又会如何? + +一般情况下,读者会根据图 1 从 B 店出发,根据概率顺藤摸瓜地计算出第 1 天的情况,再计算出第 2 天的情况。 + +- 第 1 天早晨出现在各门店的概率是:$[0.8,\ 0.0,\ 0.2,\ 0.0]$。 +- 第 2 天早晨出现在各门店的概率是......有点儿复杂,我们绘制出图 2 来帮助整理思路。 + + + +图 2 + +从图2一眼就可以看出来,第 2 天早晨该车出现在各门店的概率就是两个连续的概率之乘积,比如: +- 第 1 天 + - 出现在A店(橙色)的概率是 0.8; + - 出现在C店(红色)的概率是 0.2; + - 但是不可能出现在B,D店; + +- 第 2 天 + - 由于A店有0.3的概率还到B店,所以出现在B店的概率是$0.8 \times 0.3=0.24$; + - 由于C店有0.9的概率还到B店,所以出现在B店的概率是$0.2 \times 0.9=0.18$; + +所以,该车第3天早晨出现在B店的概率是 $0.24+0.18=0.42$。出现在其它店的数字也可以同理得到。 + +其它店的所有情况列在表 1 中,便于统计,数字的颜色和图2 是一一对应的,表示是哪个门店,方便读者对照理解。 + +表1 + +|从$\rightarrow$到|A店|B店|C店|D店|第1天| +|:-:|-|-|-|-|-| +|**A店**|$\color{orange}{0.8\times0.1=0.08}$|$\color{orange}{0.8\times0.3=0.24}$|$\color{orange}{0.8\times0.0=0.00}$|$\color{orange}{0.8\times0.6=0.48}$|$\color{orange}{0.8}$| +|**B店**|$\color{green}{0.0\times0.8=0.0}$|$\color{green}{0.0\times0.0=0.0}$|$\color{green}{0.0\times0.2=0.0}$|$\color{green}{0.0\times0.0=0.0}$|$\color{green}{0.0}$| +|**C店**|$\color{red}{0.2\times0.0=0.00}$|$\color{red}{0.2\times0.9=0.18}$|$\color{red}{0.2\times0.1=0.02}$|$\color{red}{0.2\times0.0=0.00}$|$\color{red}{0.2}$| +|**D店**|$\color{blue}{0.0\times0.0=0.0}$|$\color{blue}{0.0\times0.3=0.0}$|$\color{blue}{0.0\times0.3=0.0}$|$\color{blue}{0.0\times0.4=0.0}$|$\color{blue}{0.0}$| +|**第2天**|$\color{orange}{0.08}$|$\color{green}{0.24+0.18=0.42}$|$\color{red}{0.02}$|$\color{blue}{0.48}$|$1.0$| + +数据解读: + +- 表 1 除去表头,中间部分的 4x4 区域,和图2的数据是一致的。 +- 最后一列是中间4列的和,所以正好是第1天的出现概率。 +- 最后一行是中间4行的和,所以是第2天的出现概率。 + +OK! 2 天后的问题解决了,那么 5 天后呢?这么计算太麻烦了,我们引入转移概率矩阵的概念来帮助解决问题。 + + +### 4 转移概率矩阵 + +把图1变成表2,方便使用计算机来解决问题。 + +表2 + +|P: 从$\rightarrow$到|A|B|C|D||输出总和| +|:-:|-|-|-|-|-|-| +|**A**|0.1|0.3|0.0|0.6||1.0| +|**B**|0.8|0.0|0.2|0.0||1.0| +|**C**|0.0|0.9|0.1|0.0||1.0| +|**D**|0.0|0.3|0.3|0.4||1.0| +|||||||| +|输入总和|0.9|1.5|0.6|1.0|4.0| + +- 是一个 $n \times n$ 的方阵(中间的 4x4 区域)。 +- 矩阵各元素都是非负的,即:$0 \le P_{i,j} \le 1$。 +- 各行元素(输出概率)之和为 1,即:$\sum^n_{j=1} P_{i,j}=1$。 +- 对于输入概率总和没有限制,但是最终的总和(右下角)在行列上肯定应该一致,都是4.0(因为有个 4 个门店),即:$\sum_{i=1}^n \sum_{j=1}^n P_{i,j} = n$。 + +如果从原始数据计算的话,可以用更简单的代码一次搞定所有门店的数据,不需要像前面的代码那样一个个地计算: + +```Python +def calculate_Matrix(n_states, X): + P_counter = np.zeros((n_states, n_states)) + for i in range(len(X)-1): + a_i = X[i] + a_j = X[i+1] + P_counter[a_i, a_j] += 1 + #endfor + # 计算各列之和 + sum = np.sum(P_counter, axis=1, keepdims=True) + print("各个状态出现的次数:\n",sum) + P = P_counter / sum + return P +#enddef + +# 把原始数据中的字符 ABCD 变成 0123 +n_states= 4 +X = [ord(x)-65 for x in data_list] +# 计算转移矩阵 +P = calculate_Matrix(n_states, X) +print("转移概率矩阵:") +print(np.around(P, 1)) # 保留1位小数 +``` +``` +[Out] +各个状态出现的次数: + [[2703.] + [3040.] + [1568.] + [2689.]] +转移概率矩阵: +[[0.1 0.3 0. 0.6] + [0.8 0. 0.2 0. ] + [0. 0.9 0.1 0. ] + [0. 0.3 0.3 0.4]] +``` + + + +用矩阵来表示 + +$$ +P = +\begin{pmatrix} +P_{11} & P_{12} & P_{13} & P_{14} +\\ +P_{21} & P_{22} & P_{23} & P_{24} +\\ +P_{31} & P_{32} & P_{33} & P_{34} +\\ +P_{41} & P_{42} & P_{43} & P_{44} +\end{pmatrix}= +\begin{pmatrix} +0.1 & 0.3 & 0.0 & 0.6 +\\ +0.8 & 0.0 & 0.2 & 0.0 +\\ +0.0 & 0.9 & 0.1 & 0.0 +\\ +0.0 & 0.3 & 0.3 & 0.4 +\end{pmatrix} +\tag{3} +$$ + +而对于一个通用的问题,矩阵形式是: + +$$ +P = +\begin{pmatrix} +P_{11} & \cdots & P_{1n} +\\ +\vdots & \ddots & \vdots +\\ +P_{n1} & \cdots & P_{nn} +\end{pmatrix} +\tag{4} +$$ + +有了矩阵,我们可以方便地使用矩阵运算来代替复杂的循环逻辑 + +首先定义第 0 天的初始向量为: +$$ +X_0=(0,1,0,0) \tag{5} +$$ + +表示豪华宝驴车目前肯定在 B 门店。 + +那么第 1 天在哪个门店的问题可以转换为: + +$$ +X_1 = X_0 P=(0, 1 , 0 , 0) +\begin{pmatrix} +0.1 & 0.3 & 0.0 & 0.6 +\\ +0.8 & 0.0 & 0.2 & 0.0 +\\ +0.0 & 0.9 & 0.1 & 0.0 +\\ +0.0 & 0.3 & 0.3 & 0.4 +\end{pmatrix}= +(0.8,\ 0.0,\ 0.2,\ 0.0) +\tag{6} +$$ + +那么第2天在哪个门店的问题可以递归计算出: + +$$ +X_2 = X_1 P=(0.8,\ 0.0,\ 0.2,\ 0.0) +\begin{pmatrix} +0.1 & 0.3 & 0.0 & 0.6 +\\ +0.8 & 0.0 & 0.2 & 0.0 +\\ +0.0 & 0.9 & 0.1 & 0.0 +\\ +0.0 & 0.3 & 0.3 & 0.4 +\end{pmatrix}= +(0.08, \ 0.42, \ 0.02, \ 0.48) \tag{7} +$$ + +式7的结果和表1完全一致。 + +推广到一般情况,计算第 $n+1$ 天的概率时,需要使用第 $n$ 天的结果 + +$$ +X_{n+1}=X_n P \tag{8} +$$ + + +我们可以很方便地写出代码 + +```Python +P = np.array([ + [0.1, 0.3, 0.0, 0.6], + [0.8, 0.0, 0.2, 0.0], + [0.0, 0.9, 0.1, 0.0], + [0.0, 0.3, 0.3, 0.4] +]) + +def calculate_day(P, day): + X = np.array([0,1,0,0]) + X_curr = X.copy() + for i in range(day): + print(str.format("day {0}: {1} ", i+1, X_curr)) + X_next = np.dot(X_curr, P) + X_curr = X_next +#enddef + +calculate_day(P, 5) # 5表示计算5天的数据 +``` +``` +[Out] +day 0: [0 1 0 0] +day 1: [0.8 0. 0.2 0. ] +day 2: [0.08 0.42 0.02 0.48] +day 3: [0.344 0.186 0.23 0.24 ] +day 4: [0.1832 0.3822 0.1322 0.3024] +day 5: [0.32408 0.26466 0.18038 0.23088] +``` + +OK!经理的问题解决了,在第 5 天的时候,该豪华宝驴车在 4 个门店出现的概率依次是: + +$[0.32408,\ 0.26466,\ 0.18038,\ 0.23088]$ + +### 5 K-步转移概率矩阵 + +从上面的例子我们可以看到,只有一步的转移概率通常是不能满足实际需要的,通常我们需要知道 K 步后的情况如何。 + +比如,5步后的概率应该是: + +$$ +X_5 = X_4 P=(X_3P)P=((X_2P)P)P=(((X_1P)P)P)P=((((X_0P)P)P)P)P=X_0 P^5 \tag{9} +$$ + +式 4 可以定义为一步转移概率矩阵,那么从式9的推导可以得到式 10,定义为 K 步转移概率: + +$$ +P^K = +\begin{pmatrix} +P_{11} & \cdots & P_{1n} +\\ +\vdots & \ddots & \vdots +\\ +P_{n1} & \cdots & P_{nn} +\end{pmatrix}^K +\tag{10} +$$ + +代码如下 + +```Python +# 计算K步转移概率矩阵 +def K_step_matrix(P, K): + Pk=P.copy() + for i in range(K-1): + Pk=np.dot(Pk,P) + return Pk +``` +读者可能会注意到循环次数是 K-1,而不是 K。假设我们计算 K=2 步转移矩阵,那么一步矩阵P和自己做一次矩阵相乘就可以了,而不是 2 次。所以 K 步矩阵做 K-1 次矩阵相乘。另外一个细节是 np.dot(P,Pk) 和 np.dot(Pk,P) 都会得到相同的结果。 + +得到 K 步转移矩阵后,可以用如下代码简单地直接计算第 5 天的情况: + +```Python +if __name__=="__main__": + X = np.array([0,1,0,0]) + P5 = K_step_matrix(P, 5) + print(P5) + X5 = np.dot(X, P5) + print(X5) +``` +``` +[Out] +5步转移矩阵: + [[0.25585 0.31989 0.14028 0.28398] + [0.32408 0.26466 0.18038 0.23088] + [0.19728 0.36459 0.14005 0.29808] + [0.26448 0.29469 0.15843 0.2824 ]] +第 5 天的情况: [0.32408 0.26466 0.18038 0.23088] +``` + +与上面的迭代方法计算结果一致。 + + + +### 6 更多步的情况 + +从 K 步转移可以向更远的地方思考,如果 K 为无穷大时,这个转移概率矩阵是什么情况呢? + +我们用代码做一个试验 + +```Python +def N_step_matrix(P): + P_curr = P.copy() + for i in range(100000): + P_next=np.dot(P,P_curr) + print("迭代次数=",i+1) + print(P_next) + if np.allclose(P_curr, P_next): + break + P_curr = P_next + return P_next +#enddef +N_step_matrix(P) +``` +注意,在代码中我们使用 np.allclose(P_curr, P_next) 来判断上一次迭代的结果和本次迭代的结果的差值,如果小于1e-6则认为已经收敛,停止循环。运行过程如下所示: +``` +[Out] +迭代次数 = 1 +[[0.25 0.21 0.24 0.3 ] + [0.08 0.42 0.02 0.48] + [0.72 0.09 0.19 0. ] + [0.24 0.39 0.21 0.16]] +迭代次数 = 2 +[[0.193 0.381 0.156 0.27 ] + [0.344 0.186 0.23 0.24 ] + [0.144 0.387 0.037 0.432] + [0.336 0.309 0.147 0.208]] + +...... + +迭代次数 = 27 +[[0.26966338 0.30337037 0.1573036 0.26966265] + [0.26966195 0.30337167 0.15730289 0.26966349] + [0.26966412 0.3033697 0.15730396 0.26966222] + [0.26966285 0.30337085 0.15730334 0.26966296]] +迭代次数 = 28 +[[0.26966264 0.30337105 0.15730323 0.26966309] + [0.26966353 0.30337024 0.15730367 0.26966257] + [0.26966217 0.30337147 0.157303 0.26966336] + [0.26966296 0.30337075 0.15730339 0.2696629 ]] +``` + +我们惊奇地发现,迭代了28次后就已经收敛到很小的误差了。可以认为在经过多次的 “租、还、租、还” 循环后,某辆车在四个门店的出现概率是:$[0.27,\ 0.30,\ 0.16,\ 0.27]$,精确到两位小数。 + +从实际情况来看: +- 可能是因为通州区太远了,所以顾客都偏好与就近还车。 +- 海淀区和朝阳区的停车场要大一些,以便可以停更多的车。 +- 丰台区无所谓,因为属于地广人稀的地段,去那里还车的大概都是去机场顾客。