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