********+++++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++++********??
********+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++++******??
******+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++;+++++++++*******
****+++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++++++*******
******++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#*:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++++******
***+++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;S@#+:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++****
*****+++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%###S+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++***
*****+++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%###S%%?+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++****
**+*+*+++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;S@@@##SS#%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++++***
+*++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++%#@#@@@#S?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++**
*++++++++;+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;S%?%%###@S+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++**
*++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;***?%S##S+:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+;+++++++**
++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:+????%%*;:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++*
+++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++;::;;:::;++?%????*+;::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++
++++++;;;;;;;;;;;;;;;;;++;;;++++?%%SSSS?*****?%%SSSSS%%%??*+;;::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;++++++
++++++;;;;;;;;;;;;;;;;;;+++;*%S??S#################SSSSS%%%???*+;::;:;;;;;;;;;;;;;;;;;;;;;;;++++++++
++++++;;;;;;;;;;;;;;;;;;;;;::;??+****?????*?##########SSSSS%%%%?**+;:::::;;;;;;;;;;;;;;;;;;;;;++++++
+++++;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::;?#########SSSSS%%%%??%*:;::::;;;;;;;;;;;;;;;;;;;;;+++++
+++++;;;;;;;;;;;;;;;;;::::;::;;;::::;;::::::::+#######SSSSSSS%%%%?%%;:::::;;;;;;;;;;;;;;;;;;;;;+++++
+++++;;;;;;;;;;;;:;:;;::::;;;:;;;;;::::::::;:::+S#####SSSSSSSS%%%%%%*;:;;:;;;;;::;;:;;;;;;;;;;++++++
++++++;;;;;;;;;;;;;:;;:::;:;;:::;;;:::::::::::::*SSS##SSSSSSSSSS%%%%S?;::;:;;:;;:;:;;;;;;;;;;;++++++
++++++;;;;;;;;;;;:;;;:;:::::::::;:::;;:;::;::::::*%%SSSSSSSSSSSS%%%S#S?+;:;;;;:;;;;;;;;;;;;;;;++++++
++++++;;;;;;;;;;:::::;::::::::::::::::::::::::::::?%%%%SSSS%SS#SS%SS##S%?;:;:;;;::::;;;;;;;;;;;+++++
+++++;;;;;;;;:;;;::;:::::::;::::::::::::::::::::::;%%%%%SSS%%%SS#SS+*S#S%+;:::;:::::;;:;;;;;;;;+++++
++++;;;;;;;;;;;:::::::::::::;::::::::::::::::::::::*%%%%%SSS%%%%S#S+:;????*;:::::::::;;;;;;;;;+++++*
++++;;;;;;;::::;:::::::::::::::::::::::::::::::::::;%%%%%%SSS%%SSS#*::::+?**+;::::::::;;;;;;;;;++++*
+++++;;;;;;;;:;;::;:::::::::::::::::::::::::::::::::?SSSSSSSSS#SS##%;:::::;++;;:::::;;;;;;;;;;;+++++
+++++;;;;;;;::::::::::::::::::::::::::::::::::::::::?#####SS########+:::::::::::::::::;;;;;;;;;++++*
++++;;;;;;;;:;;::;::::::::::::::::::::::::::::::::::+S##############?:::::::::::::::::::;;;;;;+;+++*
+++;;;;;;;;;:::::::::::::::::::::::::::::::::::::::::%#############%*::::::::::::::::::;:;;;;;;+++**
++++;;;;;;;;;;:::::::::::::::::::::::::::::::::::::::+############S;:::::::::::::::::::;;;;;;;+++***
+++++;;;;;;;;;:::::::::::::::::::::::::::::::::::::::;############S;::::::::::::::::::;;;;;;;;;++*?*
++++;;;;;;;;:::::::::::::::::::::::::::::::::::::::::;S###########%;::::::::::::::::::::;;;;;;;+*???
+++;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::+#####SS#####*::::::::::::::::::::;;;;;;;;+?**?
+++;;;;;;;;;;;:::::::::::::::::::::::::::::::::::::::*#####SS####?;::::::::::::::::::::;;;;;;;+*?+++
++++;;;;;;;;;::::::::::::::::::::::::::::::::::::::::?SSSSS#####%::::::::::::::::::::;;;;;;;;;*?*+++
++++;+;;;;;;;;;::::::::::::::::::::::::::::::::::::::;%#########+::::::::::::::::::::;;;;;;;+**?*+++
+++;;;;;;;;;;:::::::::::::::::::::::::::::::::::::::::+##SSSS#SS?;:::::::::::::::::::;;;;;;;+??*****
++++;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::;%SS%%S##SS*:::::::::::::::::::;;;;;;;+?**????
+++++++;;;;;;;:::::::::::::::::::::::::::::::::::::::::*#S%?**###?::::::::::::::::::::;;;;;;++++++**
+++++;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::;*?*+;;?%*;::::::::::::::::::::;;;;;;+;;+++++
++++++++;+;;;;;;:::::::::::::::::::::::::::::::::::::::::;*+;;;*+;::::::::::::::::::;;;;;;;;;+;+++++
+++++++;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::;*+;;++;;::::::::::::::::;;;;;;;+++++++++?
++++++;;;;;;;;;;:;:::::::::::::::::::::::::::::::::::::::::++;;++;;;::::::::::::::::;;;;;+;+++;+*%##
+++++++;;;;;;;;;;:::::::::::::::;;;;;;;;;;;;::::::::::::::;++;;+*+;;::::::::::::::::;;;;+;++++*%#@#@
+++++++++;;;;;;;;;;:::::::::::::;+***++++++++++++++++;;;;;;;;;;+?*+;:::::::::::::::;;++++++;*S#@##@@
+++++++;;;;;;;;;;;;:::::::::::::::;+???????**?*+***++++++*++++++*+++++;;;:::::::;;;;;;+++++%#@###@@@
+++++++;;;;;;;;;;;;::::::::::::::::::*%%?????????%%?????%????*****++*+++;;;;;:::+++++;;;;?S##@@@@#%?
*+++++++++;;;;;;;;;:;;::::::::::::::::;?%????????%%%%%%%%%%%%%%%%%??%????????****++++++?S@@@@@##S?**
*++++++++;;;;;;;;;;;;;;::::::::::::::::;*?????????????%??%?%%%%%%%%%%%SS%%%%%%%%%?+***?%#@@@#S%S%SS%
**++++++++;;;;;;;;;;;;;::::::::::::::::::::;;;++++**?????????%??????%%%S%%%%SS%%%%*+?%%%%S#SSSSS%SS%
**+++++++++;;;;;;;;;;;;::::::::::::::::::::::::::::::::;;;;+++***????%%%%%%%%SS%%%%*?%%%SSSSS%S#SS#S
****++++++++;;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::;;;;+++*???%%%%%S%SS%%SSSSSSSS##S
****+*+++++++;;;;;;;;;;;;;;;;;::::::::::;;;::;:::::;::;::;:::;;;::;::::;;;;;;;;+++**???%%%%SSSSSSSSS
*****++++++++;;;;;;;;;;;;;;::;::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+++++++++++**********???%%%