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