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