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