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