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