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