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