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