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