
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*******************************++;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*******************************+++;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*******************************+++;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++********************************+++;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++********************************+++;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++********************************+++;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********************************++;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********************************++;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********************************+++;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********************************+++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++************************************++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++************************************++;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++************************************++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************************++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*****************************+++*****++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++++++++++***********+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***************************++++++++*+++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++++***************++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***********************++++++++++++++++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++++****************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++****************+***+++++++++++++++++++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++++++**********************++++;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++****+++***++*+*++++++++++++++++++++++++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++++**************************++++;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++***++++++*++++++++++++++++++++++++++++++;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++++****************************+**++;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++*++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++++**************++*******************+++;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++***************++******+*************+++;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++++*************++*++******++***+++++***++++++;+;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++**************+++++*****++++*++++++++++++++++++;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++***************************+++++++++++++++++++++++++;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++**********************++++++++++++++++*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++******************++++++++++++++********+++++++;;+;++;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;
++++++++++++++++++++++++++++++++*******************++++**++*************++++++;;;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++*******************+++++******************++++++;;;;;+;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;
++++++++++++++++++++++++++++++***+*************++++++++******************++++++++;;+;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;
+++++++++++++++++++++++++++++****+******+++****++++**********************++++++++;;+;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++*****+******++++***+++************************+++++++;;+;;;+;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++****++*****+++++******************************++++++;+;;;;+;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++***++++*****++++*******************************+++++;+;;+;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;+++++;;++;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++**+++++**+**++*+*********************++*+***+*+++++++++++;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++*++++++*++***+************************++++*+++++++++++++;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;++++;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++*++++++**++***************************++++*++++++;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++*++++++***++*************************+*+*++++++;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++**+++++++++++************************++++++++;;;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++**+++++++++++******++++***++****+***+++++++++;;+;+;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++***+++++++++++++++++++++++++++*++*+++++++++++;;;;++;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++***+++++++++++++++++++++++++++++**+++*+++++++;;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++***++**++++++++++++;;;;;;;;++++++++++++++;;;;;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++****+++++++++++;;;;;;;;;;;;;;;;;++;++;;;;;;;;;;;;..;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++****++**++++++;;;;;;;;;;;;.;;;;;;;;;;;;;;;;;;;;;;...;;+++++++++++++++++++++++++++++++++++++++++++++++++;;++++++;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++****+++**++++;;;;;;;;;;;.;;;;;;;;;;;;;;;;;;;;;;;;....;++++++++++++++++++++++++++++++++++++++++++++++++;;;++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++****++**++++;;;;;;;;;;;;.;;;;;;;;;;;;;;;;;;;;;;;;....;+++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++***++*++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....;;+++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++***++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.....;;;+++++++++++++++++++++++++++++++++++++++++++;;;;+;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++****+++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.....;;;;+++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++****+++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.....;;;;++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++****++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;......;;;++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++*****+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;;;++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++******++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;;;++;+++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++******+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;;;;;;+++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++******+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;;;;;;++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++******+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;;;;;;++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++******+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;;;;;;++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++****+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....;;;.;++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++*****++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....;;;;;+++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++*****++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.....;;;+++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++****++;;;;;;;+++++++++++++;;;;;;;;;;;;++++++++;;;....;;;+++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++***+++;;;;;;+++++++++++++++;;;;;;;;++++++++++++;;;...;;;++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++****+;;;;;+;;;;;;;;;+++++++;;;;;;;;+++++++++++++;;;..;;;;+++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++;;+***+;;;;;;;;;;;;;;;;;;;++++;;;;;;+++++++++++++++;;..;;;.;+++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++;;;;+*++;;;;;;;;;;;+++++++++;;;;;;;;;+++++++++++++;;;;.;;;;;;+++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++;++++;;;;;;;;;+++++**++++;;;;;;;;+++++++****++++;;;.;;;++;+++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++;;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;++++++;;.;;;;+;++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;+;;;;;+++;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++;;;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;...;..+++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;+++;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++;;;;;;;++;;;;;;;;;;;;;;+++;;;;;;;;;;;;+;;;;;;;;;+;;;;;...;;.++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;+;;;;;;++;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++;;;;;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;...++;;+++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;+++;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;...++;;++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;...++;+++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;+++++++;;;;;;;++;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;...;++;++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;++;;;;;;;+++;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++;;;;.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...;++;+++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;+;;;;;;;++++;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;...;;;++++++++++++++++++++++++++++++++++++++++++;;+++;;;;;;;;;;;;;;;;;++;;;;;;++;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...+.;++++++++++++++++++++++++++++++++++++++++++;;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;....;.++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;...;;;+++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++;++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;..;.++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;+;;;;;;;;;;+++;;;;;;;;;;;;;;;;;;;;;;;
+++++;;;;;++++++++++++++++++++++;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;++;;;;;;;;;..;;+++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;++;;;;;;++++;;;;;+++**+;;;;;;;;;..;++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;+++;;;;;;;;+++++++*****+;++++;;;;..++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++;;;;;;;;+++;;;;;;;;;;;+++******++++++++;;;..+++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;+++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++++++++++++++++++++;;;;;;;+++;;;;;;;;;;;;;;+****+++;++++++;;;.;+++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++++;;;;;;;;;+++;;;;;;;;;;;;;;;;+++++;;;;++++;;;;.;+++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++++;;;;;;;;;;;;+;;+;;;;;;;;;;;;;;;;;;;;;;;++++;;;;.++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;++;;;;;;;+++;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++;;;;;.;;;;;;;;;;+;;;++++;;;;;;;;;;;;++++++**++;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;++++;;++++++;;;;;;;;;;;;;;;;;;;;;;;
++++++++++++++++++++;;;++++++;;;;;;+;;;;;;;;;;;;;;++++++++++++++++++****++;;;;;.+++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;
++++++++;;;+++++++++++++++++++++;;+;.;;;;;;;;;;;;;;;;;;;;;;;;+;++;++***++;;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++++++++++++++++++++++++++;;+;..;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++;+;;;;;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..;;;;
++++++++++++++++++++++++++++++;;;+...;;;;;;;;;;;;;;;;;;;++;;;;;;;;+++;;;;;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;......;;;
++++++++++++++++++++++++++++++;;+;..;+;;;;;;;;;;;;;;;;;;++;;++++++++;;;;;;;;;.;+++++++++++++++++++;;++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;......;;;
+++++++++++++++++++++++++++++;;;;...++;;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;+++;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;+++;++;;;;;;;;;;;..........;;;
+++++++++++++++++++++++++++++;;+;..;++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;++++++++++;;;;;;;;;;;.........;;;
+++++++++++++++++++++++++++++.;+;..;++;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;.;++++++++++++++++++++++++++++++++++++++++++++++++++++++++;++++++++++++++++;;;+;;;;;;;;;;;;......;;;;;
++++++++++++++++++++++++++++;;++;..;++;;;;;;;;;;;;;;;;;;;;;;;++++;;;;;;;;;;;++;.;++++++++++++++++++++++++++++++++++++++++++++++++++++++;;++++++++++++++++;+++;;;;;;;;;;;......;;;;;;
+++++++++++++++++++++++++++;.;;;...;++;;;;;;;;;;;;;;;;;;;;;;++++;;;;;;;;;;;+++;.;+++++++++++++++++++++++++++++++++++++++++++++++;;++++++++++;;+++++++++;;;;+++++;;;;;;;;......;;;;;;
+++++++++++++++++++++++++;;.;;;;...;++;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;+*+++;.;;+++++++++++++++++++++++++++++++++++;;++;++++++++++++++++;;;+++++++++;;++++++++;;;;;;;......;;;;;;
++++++++++++++++;;;;;+;;;...;;;;...;+*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.;;+**+++..;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++;;;+++++++++++++++++++;;;;;;;.........;;;
++++++++++++++;;;;;;;;;.....;;;;...;+*+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..;+***+++;.;;;;;;+++++++++++++;++++++++++++++++++++++++++++++++++++;;;++++++++++++++++++++;;;;;;;;;.........;
++++++++++++++++;;;;;;.....;;;;;...;+*+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.;++***++++;;;;;;;;;;+++++++++++++++++++++++++++++++++++++++++++++++;;;++++++++++++++++++++;;;;;;;;;;;;;.....;
++++++++++++++++++;;.......;;;;.....+*+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++****+++;;;;;;;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;.;;;
++++++++++++++++;;.........;;;;.....+**+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.+++*****++++;;;;;;;;;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;
+++++++++++++++;...........;;;;.....;+*+;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;+++*****+++;.;;+;;;;;;;;;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;
+++++++++++++;............;;;;;.....;+**+;;;;;;;;;++;;;;;;;;;;;;;;;;;+++******+++;..;+;;;;;;;;;;;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++;+++++;;;;;;;;;;;;;;;;;;;
+++++++++++;..............;;;;.......+***+;;;;;;;;;++++;;;;;;;;;;;;;++++******+++...;++;;;;;;;;;;;;;;++++++++++++++++++++++++++;;;;++++++++++;++++++;++++;;;;;+;;;;;;;;;;;;;;....;;;
+++++++++;;...............;;;;.......;****+;;;;;;;;;++++++++++++;;+++++*******++;...;;+;;;;;;;;;;;;.;;;+++++++++++;+;+;;;;;;;;++++++++++;;;;;;++++;;;;;;;;;;;;;;;;;;;;;;;;;;......;;
++++++++;.............;...;;;;.......;****++;;;;;;;;;+++++++++++++++++********++;....;++;;;;;++;;;;;..;;;++++++;;;;++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++++;..............;...;;;;.......;******+;;;;;;;;;++++++++++++++**********++;....;++;;;;;;++;;;;....;;;++++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++++;;...................;;;;.......;*******+;;;;;;;;;+++++++++++++**********+++;...;;+++;;;;;+;;........;;++++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+++;.......................;;;.......;********++;;;;;;;;+++++++++++***********+++;;;.;;+++;;;;;;;...........;;++++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.....;;;;;;;
+;...................;.......;;......;+*********++;;;;+;++++++++++************+++;;;..;;;++;;;................;+++++++++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.......;;;;
;....................;........;;.....;+**********+++++++++++++++**************+++;.;..;;;++;;..................;;++++++++++++++++++++;;;;;;;;;;;;;;;;;++++++++++;;;;;;;;;;........;;
...............................;;....;+************++++++++++*****************++;..;..;;;;;;.....................;++++++++++;;;+++++;;;;;;;;;;;;;;;+++++++++++++;;;;;;;;;;;;;.;....;
....................;...........;;;;;;+**************+++++********************++;..;...;;;;;......................;;++++++;;;++++++++;;;;+++;;;;;;;;;++++++++++;;;;;;;;;;;;;;;;;;;;;
....................;............;;;;;+***************************************+;...;...;;;;;.......................;;++++++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;