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