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