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