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