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