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