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