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