******++++++++;+;;;;;;;;;;;;;;;:;:::::::::;%S#S+:::::::::::::::::::::::::;;;;;;;;;;;;;;;++++++******
*****++++++++;;;;;;;;;;::;;::::::::::::::+S###S?*+;:::::::::::::::::::::::::;;;;;;;;;;;+;++++++*****
******+++++++;;;;;;;;;;;::::::::::::::::*S#####S%%?+;::::::::::::::::::::::::::;;;;;;;;;+;++++++****
****+++++++;;;;;;;;;;;;::::::::::::::::*S########%%%+:::::::::::::::::::::::::::;;;;;;;;;;++++++++**
****++++++;;;;;;;;;;;;::::::::::::::::;*?S########SS*::::::::::::::::::::::::::::;;;;;;;;;+++++++***
***++++++;;;;;;;;;;;;::::::::::::::::*???%S########S+:::::::::::::::::::::::::::::;;;;;;;;;;+++++++*
*++++++++;;;;;;;;;;;:::::::::::::::::SS??%%%S######+:::::::::::::::::::::::::::::::;;;;;;;;;;+++++++
+++++++;;;;;;;;;;::::::::::::::::::::+****?*?S####?:::::::::::::::::::::::::::::::::;;;;;;;;;++++++*
++++++;;;;;;;;;;:::::::::::::::::::::;**?????%SS?+::::::::::::::::::::::::::::::::::::;;;;;;;+++++++
*++++;;;;;;;;;;;::::::::::::::::::::::+????????*::::::::::::::::::::::::::::::::::::::;;;;;;;+++++++
*+++++;;;;;;;;;;;:::::::::::::::::::::::;*??????+;:::::::::::::::::::::::::::::::::::;;:;;;;;;;+++++
++++++;;;;;;;;::::::::::::::::::::::::::::??%%???*+;:::::::::::::::::::::::::::::::::::::;;;;;;+++++
+++++;;;;;;;;;:::::::::::::::::::::::::::+?????????**;:::::::::::::::::::::::::::::::::;;;;;;;;;++++
+++++;;;;;;;;;::::::::::::::::::::::::::;%%??????????**;:::::::::::::::::::::::::::::::::;;;;;;;;+++
++++;;;;;;;;;:::::::::::::::::::::::::::?%%%%%%%%%??????+::::::::::::::::::::::::::::::::;;;;;;;;+++
+++;;;;;;;;;::::::::::::::::::::::::::::%%%%%%%%%%%%%????*:,::::::::::::::::::::::::::::::;;;;;;+;++
+++;;;;;;;;;;:::::::::::::::::::::::::::%SSSSS%%%%%%%?????*::::,::::::::::::::::::::::::;;;;;;;;;+++
++;;;;;;;;;:::::::::::::::::::::::::::::?######SSSSSS%%%???*:::::::::::::::::::::::::::::;;;;;;;;;++
++;;;;;;;;;::::::::::::::::::::::::::::+S###########SS%%%%??+,::::::::::::::::::::::::::::;;;;;;;;++
++;;;;;;;;;;:::::::::::::::::::::::::::*SSSS########SSS%%%???:,::::::::::::::::::::::::::::;;;;;;;++
+;;;;;;;;;;;:::::::::::::::::::::::::::+SSSSS##S###SSS%%%????*:,:,:::,,,:::::::::::::::::::;;;;;;;++
+++;;;;;;;;:::::::::::::::::::::::::::,*SSSSS%SS%##SSS%%%?????;,::::,::,,::::::::::::::::::;;;;;;;;;
++;;;;;;:::::::::::::::::::::::::::::,+%SSS##*;#SSS#SS%%%%????*:,,::,,,::,::::::::::::::::::;;;;;;;;
++;;;;;;;:::::::::::::::::::::::::::,:%SSSS#S;,*####SSS%%%%????;,,,,,,:::::::::::::::::::::::;;;;;++
++;;;;;;;;:::::::::::::::,,:::::::::,;S#SS##*,,:?#S##SS%%%%%????;,::,::::::::::::::::::::::::;;;;;;+
+++;;;;;;;;;;;::::::::::::::::::::::,?#SS##%:,,,;%SS###S%%%%%???+,,:::::::::::::::::::::::::;;;;;;;;
+++;;;;;;;;;;;;::::::::::::,:::::::,;?SSS#%:,,,,;%SSS###S%%%%%%%*,,,,,,:,,::::::::::::::::::;;;;;;;;
++;;;;;;;;:::::::::::::::::::::::::,+%?%S%:,,,,,*SSS#####%%%%%%S*,,,,,,,::,::,,,,:::::::::::;;;;;;;;
;;;;;;;;;;::::::::::::::::::::::::::*??%%+,,,,,:%SSSS####S%%%%%S+,,,,,,,,,,,:,,::,:::::::::;;;;;;;;;
;;;;;;;;;::::::::::::::::::::::::::;**;;;:,,,,,*S#S######S%%%%%%;,,,,,,,,,,,,,,:,,,::::::::::;;;;;;;
++++;;;;;::::::::::::::::::::::::::+**:,,,,,,,;%S#S#SSSSSS%%SSS%;,,,,,,,,,,:,,,,,,,,:::::::::;;;;;;;
+++;;;;;;:::::::::::::::::::::::::;+*;,,,,,:::*SS#SS%%%%S%%SSSS?:,,,,,,,:,::,::,,:,:::::::::;;;;;;++
+;;;;;;;;;;;:::::::::::::,:::,,:::+;:::,,,:,,:%######S%SSSS%++*;,,,,,,,,:::,:,,,,,,,::::::::;;;;;;;;
;;;;;;;;;;;;:;::::::::::::::::::::;;::,,,,,::;%######SSSSSS;,,,,,,,,,::,:::::,,,,,,,::::::::;;;;;;;;
+;;;;;;;;::::::::::::::::::::::::::,,:::,,:,:%#S#####S%SSS+,,,,,,,,,,,,,,:::,,,,,,:,,:::::::;;;;;;;;
+++;;;;::::::::::::::,,:,,:,,,,:,,::,::,,,,,*SS######S%?S+,,,,,,,,,,:,,,,,:::,:::::::::::::;;;;;;;;;
++;;;;;;::::::::::::,:,,,,,,,,:,,,,,,:::,,,+S#S#S###SSS%*,,,,,,,,,,,,,,,,,:,,:,,,,:::::::::;:;;;;;;;
++;;;;;;;;;:::::::::::::::,,,,,:::::,,,,,:,*#SSSSSSSSSS+,,,,,,,,,,::::,,,,,,:,,,,,,:::::::;:;;;;;;;;
++;;;;;;;;;;;;;;;::::::::::,,,::::::::,,,,,+SSSSSSSSS*:,,,,,,,,,,,,:::,,,,,,,,,,,::,::::::::;;;;;;;;
+++;;;;;;;;;:::::::::,,,,:,,,,:::::::::::::,+#SSSSSSS*:,,,,,,,,,,::::,,,,,,,,,,,::::::::::;;;;;;;;;+
+++++;;;;;:::::::::::::::::::::::::::::::::::?###S%?%?+,,,:::::::::::::::::::::::::::::::;;;;;;;;+++
+++;;;;;;;:::::::::::::,,,,,::::,::::::::::::;S##S%%?%%*:::::::::::,:::::::::::::::::::::::;;;;;++++
+++;;;;;;;;;:::::::::::::,,::::::::::::::::::,*##SS%??SS+,:::::,,:,,,,,,,,,,,,,::::::::::;;;;;;;;+++
++++++++;;;;;;;;;:;::::::::::::::::::::::::::::%###S?*%%;,,,,,,,,,,,,,,:,,,,,,,,:::::::::::;;;;;;;++
+++++++;;;;;;:;:::::::::::::::::::::::::::::::,;*%?*+;+;::,,,,,,,,:,:,,,,,,,,::,,:::::::::;;;;;;;+++
++++++;;;;;;;;::::::::::::::::::::::::::::::,,,,,;**+;;;:::,:,,,,,:,,:,,,,,,,,,:::::::::::;;;;;+++++
+++++;;;;;;;;;;::::::::::::::::::::,,,,,:,,,,,,,,,;*++;;;:::,,,,,,,,,,,:,,,,,,:::::::::;:;;;;;;+++++
+++++++;;;;;;;;::::::::::::::::,,,,,,,:,,,,,,,,:,,:**+;;;:::,,,,,,,,,,,,,,:,,,:::::::::;;;;;;;;;++++
+++++;;;;;;;;:;:::::::::::,::::::::::::::::,,,,,,,:+*+;;;;::,,,:,,,,,,,:,,,,,,::::::::::;;;;;;+;++++
****+++++++++;;;;:::::::::::::::::;;;:::::,,,,::::;++++;;;;::,,,,,,,,,:,,,,:,:::::::::;;;;;;;;;+++++
*?????????******+++++++++++++;;;;;;;;;;::::::::;;;;;;;+;;;;:,:,,:,,,:,,,,::::::::::::;;;;;;;;;++****
****?????%%??******++*++++++++++++++++++++++;;;;;;;++++++++;;;;;;;;:::::::,:::::::::;;;;;;+++++++*??
***+++**?%%%%?%%%%%%???%%%%??*????***?********++***+++++++++++++++++++++;:::::::::::::;;;;+********?
***++++++*?%%%%%%%%%?%%%%%%??%%%%?*?%%%%???%%%%????????**?****+****+***++++++++++++++;;;;+++*???????
****+++++++*%%%%%%%%%%%%????%??%??%%%%%%??%%%%%*?%%%%%*?%%%%**?%%???%%%????******??????******???????