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