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