*******************************!*?&####$%???%%+*********************************
********************!**!!!!!!!!*%#####$&=++???++!!!*!***************************
*****************!!!!!!!!!!!!!*=######$=++%=%$$%*!!!!!!!*!!!********************
************!!!!!!!!!!!!!!!!!!?##@#@##&=??++=$##=*!!!!!!!!!!!!******************
*********!!!!!!!!!!!!!!!!!!!!+&$#@@@##&&??+?=##&%+!**!!!!!!!!!!!!!!*************
*******!!!!!!!!!!!!!!!!!!!!!!=$#@@@@@##$&=++&&#%+?++*!!!!!!!!!!!!!!!!!**********
*****!!!!!!!!!!!!!!!!!!!!!!!*&$#@@@@@@###&??+?$?**===*!!!!!!!!!!!!!!!!!!!!******
***!!!!!!!!!!!!!!!!!!!!!!!!!?&$#@@@@@@@@##&%?+&=?+%$&?!!!!!!!!!!!!!!!!!!!!!!****
*!!!!!!!!!!!!!!!!!!!!!!!!!!!=%&#@@@@@@@@@@#$+~+&&&&#$&*!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%&#@@@@@@@#@@#%:.:%$#$@##=!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!*%=&@@@@@@####@$+,',+$#####&=!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!;!!!!!!!!!!!!!!!!!!!*%=%@@@@@##$%##=:~,~;&###@@$&%+!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!;;!!!!!!!!!!!!!!!;;;+%=%#@@@##$&&#%++?+!;&##@@@#+*!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!;;;;!!!;;;;;;;;;;;;;*%=%#@@####&&&!;+&$&%&#$=$##+;;;;!!!!!!!!!!!!!!!!!!!!
!!!!!!!!;;;;;;;;;;;;;;;;;;;!&&=#@@#$&%%&+,,!??*+?#?-=##%!;;;;;;;!!!!!!!!!!!!!!!!
!!!!!!!!;;;!;;;;;;;;;;;;;;;!&$=#@#$=+**?*,.,~~~,!$?-=#$%+!;;;;;;;!!!!!!!!!!!!!!!
!!!!!!!!+;!!!;;;;;;;;;;;;;;*%$=$@#&?*!!?*,.....,;%!-$#=++*!;;;;;;;;;;!!!!!!!!!!!
!!!!!!;;!?=+!!!;;!:;;;;;;;;*=#=&@@&=+**=+~,.,,,,!*~+$#%!;;;;;;;;;;;;;;;!!!!!!!!!
!!!;;;;;;;*==+*!**;;;;;;;;;!%@&%##%%?+?%?!~.,,,,*;!$&$=?;;;;;;;;;;;;;;;;!!!!!!!!
;;;;;;;;;;;;*=%?+*!;;;;;;;;!%@$=##+==??=+:,.,,,~?=&&=%=?*;;;;;;;;;;;;;;;;;;!!!!!
;;;;;;;;;;;;;;*&=+*;!;;;;;;;$@@%$#%*=??%&=+-~~~:$=$&++=+?!;;;;;;;;;;;;;;;;;;!!!!
;;;;;;;;;;;;;*%&%%%&?!;;;;;*#@@$&##?+?=&=?*-~~:$&&$%?*?==?*;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;+&&%?*;+%=+!;;;&@@@#&$#@%?=?+*:--:=@&&&%%*+=?==+;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;*?%=?%&!-?+*+;:;=#@@@@#$###&=?*:~-::=@%%==%?*?%==+*!;;;;;;;;;;;;;;;;;;
;;;;;;;;;*%%%&%+:*;!!:::!%$@@@@@@$$#$$&=?*;:-:=@%=?+????%$&?*+!;;;;;;;;;;;;;;;;;
;;;;;;;;;?&=%#$%:*+*;::*&%#@@@@@@@$$$&&%?!-~~:?@%%?+?+%&&$$&=++;;;;;;;;;;;;;;;;;
;;;;;;;;;+&?*%$$%!;*::*&=#@@@@@@@@@$&%%?*:-~~:!$&$%&%&&$##$&=?+!;;;;;;;;;;;;;;;;
;;;;;;;:;!$=*+=%?;*!:;%=$@@@@@@@@@@#&=+*!:-~~:;*&##$$#######&?*++!;;;;;;;;;;;;;;
;;;;;;;::;&%*!++;;+;:*%=##@@@@@@@@#$&=?;;--~,-:-!$@@####$#$$&%?+?=?!;;;;;;;;;;;;
;;;;;::::;%&=!!**++::?+=##@@@##&$&&%=??:---~,~--~~?=&$$##$&&%?++?=&%!;;;;;;;;;;;
;;;::::::;%&%?*+??!::?*%$&%=&&=;++==***:,-:~,,--~~:-+?+!*+=&%=?++**++;;;;;;;;;;;
:;::::::::?$&%?+??:::+*?*;;!%%+-;!!+*!;-,~:~~~:-~~-~!+*~,,,-%$$%%====?;:;;;;;;;;
::::::::::?$&=+*++;::!*!;::*%%+~;;:::!:~,-;---~,,,,,;++~,,..,%####$#%%%!:;;;;;;;
::::::::::?$&=?*++;::;*;::;?&&%~:;;;:-::-!;:-~,..,:,!+*;,,..'~$#@@$?$?*%;:;;;;;;
::::::::::?&&=?++?!::!!;:;+%&%?--::::-~~:+:-~,,,,,*.+=+*,,,.'.?####+&?:?!:::::::
::::::::::;+#$%=%;:::*!;;*=&&%;-~-----~~!;--~,,,,-+.:%+*-~,.'';#$##??=:!!:::::::
:::::::::::*#$+!=:::;*!;!+%&&=:-~--~~~,,*!-----~~~!'.=+*!-~.''-##$&?*=;;;:::::::
:::::::::::*#$?;=;::;*!!*=&&%+-~,~~~~,,..~:;;:-~~,,``*?**:~,''~$#$&+!=;;::::::::
:::::::::::*#$?;=;:-;*!!+&$&%;~,~,~,,....~!!!:-~~,.``,*;!;-,.'~$#&$=*=::::::::::
:::::::::::*#$=;=!:-!*!*?&$&+-~,...,.....-**!:-~~.````~+*;-,..,$#%$&=?;:::::::::
:::::::::::*##=;?+--!!!*=&&%!-~.''''.....;+*!:-~.''````:!;-~,..%&&$$$**;::::::::
:::::::::::*##%!+?-:;;;*=$$=;-~.''`'''''.;!:-,.'''`````'?*:~,,.:&&%#&?!*::::::::
::::::::::-*##%!*=:!;;!+%$#=!:~,.'````''''.......''`````*?:-~,,.*%#@&?*+;:::::::
::::::::::-*##&*!%%$$%==&$#=*;-,.'''`''''''......'''````!?!*?==+;&@#%?+*+:::::::
::::::::---+##&+;=$#$&&##$#%*!:~,.''''''''...,,,...'````;=%&$&%==&#&%%?+?:::::::
:::::::----?##&+;?$$&&$@@##&+!;-~,..........,,,,,,.''```*=#$$&&%=%&=$$%==;::::::
:::::------?##$?;*&&%%$@@@#$+*!:-~,,,,,,,,,,~~~~~,,.''``?%#$$&&%==%&##&=??*!;:::
::::-------=##$?;!%&?%#@@@##=**;:-~~,,~~~~~~~~~~~~~,.'',%&@$$$&%==%&$#$&+!::::::
-:---------=##$=!!=&+&#@@@##&+*!;:----------::::--~~,..*%#@#$$&%===&&&$$+;::::::
-----------%##$%*;?&%&#@#@@##%++*!;::::::::;;;;;;::-~~:&&#@#$$$&%==%=%%&*:::::::
-----------%##$&?!?&&$#$&$#@@#%=?++****!********+*!!;!%%&$##$$$$&%%%??==;----:::
-----------%##$&=+?&&&&%%%&&$#$&%%===*!!!!!!*+?=%%%====%&&&&&&&&%==%=+=!:-------
-----------%###$%?=&&$&&%%%%&%%%%%=$$&&%%%&&&&&$$$&&&&&&&%%=====?+?%&?+:--------
-----------=###$&%%&&&$&&%%&%%%%%%=&$$$$$$$$$$$$$$$&&&&%%=??+**!;;+=%+*;--------
-----------?###$&&&&&$$$&&&$=%%%%%%$$$$$$$$$$$$$$$$$$$&&&%%=??+*!;!==*:::-------
-----------+##$$&&&&&#$$$$$$%%&&&&&##############$$$$$$$$$&&&%%=?**=?+:---------
-----------*##$$&&&&&&$&&$$$&&&&&&&##$##$$$$$$$$$$$$$$$$$$$$$&&&&%%%?=:---------
-----------!$#$$&&&&%:*?%&$&&&$&$&&&%%%%%&&&$$$$$$$$$$$$$$$$$$$$&&&=?=:---------
-----------:&#$$$&$$!---;=#$&*$##&%==???=======%%&$##$$$$$$$$&&&&&%+++----------
------------?$$$$$$+----!%$?%*%&&&%=?????=======%&&%%*&#$$$?$$%%*+*;?;----------
------------:?&&&%!---:!+%+:+!%%&%=?+****+?+++++?%&?+;?##$$$##&%*!!*;-----------
--------------:::---:;!**!:+*?%%&=?+**!!!*+**!!!*==+*;:&#&=*&#&+;:::------------
--------------------:::----+&$&$$%+**!;;;!*!;;;;!==??!;=$%*-?&?;----------------
-------------------------~-%#@@##$=?+*!;:!*!;;;;*%&%=?%&&?:+&?*-----------------
-------------------------~+#@@@#####$$%==??+===%=%&==??=&%=%=*:-----------------
---------------------~~~;;$@@@@#####$#%$$&%==%%&%=&==++?%&&?!-------------------