--------------------------------------------------------------------------------------------------------------------.-----------------------------------------------------------------------------.-------------------....--.---.--.....-
----------------------::------------------------------------------------------------:----------------------------------------------------------------------------------------------------------------------------------------------------
----:-:--------:---::---:-:::-:-----:--:-----------------------------------------------------------------:---------------------------------------------------------------------------------------------:---------------------------------
------:::::::::::::-::::::::-::::::::----------:-----:---::--:---------------------::------:-------------::-------------------------------:-:--------------------:--:-------------------------::------:----------------------------------
-:----%%%%%%=++++++++++++++++++++++++++++++++++++++++++=+++=+++++++++++++++++++==+=========+====%%@%==%%%%@@%======================================================%%%%=%%%%%%%%==%%%%@%=+*+*+***+++%@@%%@%%%+++******++=%@@%=%####------
----:-@#@=@%@%%==+=@@@%@*#@%+=@@@@@*#@%###@@++#@%+@@###@+#%@##@@%+=#@@%%%@@@@%%=%#@##%%@%@#%++=%===+++=+++=====++=@@@@@%@@#@@%==@@@@%%=%#####@@@@#%@####@%%@@@#@==%###@#=*+@#%%%%+#@==#@%++=+##*#====@@+#+@#%%%==+#@+#===%@%+@##+@#------
----:-#=%%@@%%=%#=@+++++*#@%=++++++=#@+%++++++*%@=+++++*@@@+@+++++=+#%@@@@@@#@%%@%@%@@@=+====+===++%=+++=%+===++=+==+=@@@@@@@%%%@@@@@%%@@@%@##@@%@%#@%@@@@%@#@@@%%%@@@%##@%%@====+@#+#==+%=++#@=#=++++=+@=@+=+++==#%*#==+===+#@@%@%------
-:--:-+@@%@%@@@@@*+******=#%+++++++*#@++++*+**##=++++++*%@%++*+*+**#@@@@@%@#@=@@%@#@++=========+=====%%%%===++++=++++===+@@@@%@@%@@#%@@%@@#%@%####@@@##@@@#%@##%@@@@@#@@@=*%==++==*+%%++====+%@+%+++++%###@=+++++*%=*=++*+=@#@%%@@%------
--:-:-#@@@=@@%@###############################%%%%#################%%@###%@@%@###%+========%@#@@%%====%=%%%=%%%+++++++++==+=@###@%@@@###@@@@########@@@%####@@%@####@@@@###########@@@#@#@@@@@@#@@@@#@####@@@@@@@@@@@@@%@%%%@@%@#@#------
--:::-##@@%%*::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+=@%=+======%@##=+===++++***++**++++==%====++=++=+=+@+*:::::--::--::--:::::::::::::::::+*=*:%*=*:*%::+@:::%**@*::--:::::::::::::::::::--::---:::-:-*@@@#:-----
----:-#@#+:::#=*#%+#:#+@%+#%%=#+#:+*@%=@%=%@#+@=+#=@=@*%%=:*%@=%*#=@*@%=:*+@+========@##@=+%=++++++******+++*=++*++%=+==========%%+:-:::::::::::-::::::-::::::::--*%+**+%=+*+%+++%+++=++#*::--::::-::--::::::::-:-::::::::---:-*=#@------
---::-@%=:::::::::::::::::::::::::::-:::::::::::::::::::::::::::::::::::+%=%+=====%####@=%==+++++*::::***+**++*+***==@%======+==+=@++:*%::*@*=*:*@*==::+:+::=:%::==:==::%**%::*:%@==*+::+:%+::@*:=::=:@::%%:%*-=#@=%:---:-::::::*%#------
--:::-%==::::%::*%%=::=%%+*%%%::=%*-+@=:%%%:+%%+:=:::+:::::%%+:::::::::+@========@#@##@%===++++++*::::***+*++++****++=@#==========%+%+:*::=+=#==::+@+::#@@::%=#::+:#@+::@+::@:*-:::*@%::=+@%+::#@=-:#+#::=*#%=:::::@::-:::--:--:+=%:-----
-:::::=%=+::*%=:+%=:::::%:::=*:@%+:+@%::@@=:=%=::=*+:=:%:::@%%:::::::*=%%+=%===%##@@##@%%==++++*****:::**+++++++*+*++=%@#%===========%+**-*%=%:==*:@+::+=+::*%=::++:==:*%*+#+**=%+*@@+***=*==***%***+=+**=++@+====#=:::::-::::::++%:-:---
--::::=@=+::%=@:++**:::=+:::%::%+%**%==-*+@::*++-*+%:**@:::@=@::::::*=@=+=%%==@#####%@@@%=+++++**+**:****+++=+++++==+==@##@========%=+=+::::::::*+*=*=@+::=*:%***:==%*:*@+:*%*:+=:+%::=+:*%:::%=::@*%**:*=::::::---------:-::-::+=%:-----
---:::==%*:::::::-:-:::-:::-:----:-------------------:-::::::::::::*==%=%==%=####@####@@%+++=++**:*::****+++=+++++*++==#@@#===========+%+-::::::*::#*::#::++%@:+@::%++*:*+:*%*:**@@=*:+::%%*:*@-:==*@=@:-*=----:----------:::--*+%%:-----
----::==%:::::@%%:=%%+-:::--:-:----:--:-------------:-:::::::-::::*+%=+%====%##@@###@@#@%=+++=***:::::***++=====+****+=%@#@@=========+==+*---::-=*-%::%+::+=****%*:-=*%:=:::%::*%:*%::*=::%:::%=::=++*=*::*=-------------:::---*+%%:-----
--:-::+==:::::@%+:=%%::::----------:------:-----:::::--:::::::::::+@%+======@##@###@###@%%+++++***::**++++====+=*++=++=@##@#@==%======+=++::::::::***::**:::::::::::::::::::::::::::::::::::::-::::----------------------:-::---++%:-----
---:-:=@=+::::%++:*+%*:----------:-:---------------::--::--::::::+=%========@##@@######@@=+++=++**=%@######@%++=*%#@%@####@##==========+%%+-::-----::::::::::-:::::::-::::::::*:*::::::::--::::::---------------------------:---++%:-----
-:-:::=@%+:::::-:--------:-----:--::--::--------:---:-::::::::::*+==+======@@##%@#@######=+++++++=%@@@@##@%@+*:=+@#####@@@###===========%=+*-------------:::::-:***:::::*%%=%=%====%****::*:--:--------------------------------:+=%:-----
---:::+%%*::::::-:::-::::::::--*%@@%%@%@@=::::::::-:::::::::::::+@%+======%@##@=@=%#####@=+++++++=@%+%@@%@#=+*:*+###%++%#####%==========+==*-:-:---:-------:::*=%%*:::*%%====%%==%@==%=:::*=+:::---------::------------:-------*+%%:-----
-::--:+=%::::::--:--::-::::-*@%@%%@%%#=%#%@@%::::::::::::::::::*+==+=====@#@%@%@%=%%@####++**++=%%%####%@#@**++**%#####@#####@=+=+==+=+=+@%+::::--:::------::-:+%%*::==%%=%%@#@@#@%%%%=+*::=%*::------------------------::-----:+%@:-----
::-:::+%%*::::::--::::-::-:@%@=%%+*:%+:*+@@=#@=::::::::::---::-+=+=====%#@@###@#@@%%####%===+******++++%%=+:*=+**=#@==%@######++=+==+=+++==+*--:----------:::--*%%*:==@@@=*+=@#@%+*=@@%+=*:=%=::::----:----------------------:-:+=%:-----
::::::+@=+::::::-:::::::::@#@%=*@##%#####@*@@#@%:::::::::::-:::+%=+=+=@#@@%%@#####@@@#@@%===+****+*****==***=++**+##@==%@#####+=+=++===+==++*::-:::::::::-:::-::%%*+=%@@@%+=*+@@=+=%@%=++=:===*:----:-----:----------------:----+=%*-----
--:-::+@%=::::::::-:::::-@@##+=#####@######+@##@=::::::---::::*+%%++=%####@=%@#####@@#@%=====+****++++******+=++*+=#@%=%@=%@###+=+=+++=+=+==*:::::-::::--:-::-::%%+++%@@%=:*=%@@@++=@%%=+=*+%%*:-----:------::----:-----:-----::*%%:-----
---:::+=%*:::::::-::-:::*@#@%:@+:@######%*=+*#=@%::::::-::::::*===+===#@#@%%%@@@######==%====+++*+++******+===++**+##@==%@@#####=+++++++++@%*::::::::::---::::::=%*+=%@@@=%%%+@@%%=@@%+=+=:=%=*:::-::-------::----------:-----:*+@@:-----
--::::==%:::::::::::::::*@@%%:##+@@##@@@%@##*%%@@:::::::::::::*===+=@@#@@#@=%#@@######@+=====+++=+++****+%%%%@@%%@###@%=%@#######%++++++++==*::::::::::---::-::*%%+:==@@@@+==%@@@=+%%%+==+:===*::---::-:-:--:-----:---------::::+%@*-----
::::::+=%*:::::::::::::::@@=@*%%=@%%%%=%%%#+=##@=:::::::::::::*=%==#@@@@##=%=%#####%==+=======++==++**++=*:*=+=%######%==@#@######@+++=+=+++*:::::::::::::::::::%%+::%@@@=@@=+%%%=@%%%==*::=%%*:-:-:-----------------------:::::*%%*----:
--::::+%%+::::::::-::::::*@@=@+%@=%%%%===#*%%#@@::::::::::::::*=%=%@#@@@#@@@=#######=+++=========+*++++**+**+*++=+@###@=%@#@#######%+++=====*::::--::::::::---::=%+::*%@%@#@=%@@%%@@@%%::-:+%=::-:----:----------------:--::::-:+=%*-----
::---:+%%+:::::::-::::::::*@@=%#+=%%=%%%*=#%%@@::::::::::::::::+===##@%##@@%%########%=@%=+=====+++======%%==**+%+@###@%@@#######@@@=++++=++:::::::::::::-::-:::=%+:::+%=@%==%@@===%%%*:--:=%+:-:::--:::------------------::::-:+=%*-----
::::::+%%+::::::::::::::---:=@@@%%@@%@%%@@@@@*:::::::::::::::::+@%+@@#@@@#@@%@#@######@@%=+====++=%=++%@====%=%@@@@###@@@#######@@#@+++++=++::::::::::::::::::-:=%+::::+%::::=%**:::*=+::::=+:::::-:::::--------------------:::*+%@*-----
:--:::=%%*:::::::::--:::-::::::%@%@%%@%%%@=::::::::::::::::::::+%%=##@@@@@@@#@%@######%=@====%%==++++=%+**++**++%@@@@#@@%@######@@#%+++==%=*:::--:-:::::::::-:***+**:::::*::**:::-::::**::*:--::--:--:::-::----------------:-:-:+%@*-----
---:::+%%*::::::-:::-::::::::--::-:::::::::::::::::::::::::::::*=%=%#@@@@@@###@@@#@###%=%%====%%====++*+++++++%@%=%@##%%@######@@##=+==+=%+::----::-:::+::+==*::==%**%%=::=%*:*%=:=%%:+%%+:=-::+:::-:%%+:-:-::---------------:::*%=*-----
---:::+@%+:::::::::::::::::::::-::::::::::::::::::::::::::::::::+%==##@@%@@###@@@@###@=%=%%====%%@%=+++++++++*+++=%@#@%##@#####@@#@=====*=*:::--::::::=%::%++::::*=:::%*:%=*:+%=::@=+:+@%::%*=:=:%:::@=@:-------------------::-:*==+-----
--::::+@%=:::::::::::=+++=:%=+==++=*+*==+=+:==+%==%==:::::::-:::*=%%%#@@@@#@@@@@###@@=*:+%%%===%=%%%%=+++****+++====%@#########@@%%===+%=*::::-:::::::%==:%::::::=*:::%::%*%*+%=%:**@::*==:*=%::*@*::@*@:::-----:------------:::+%=*-:---
-----:+%%*:::::*===%:=*:*-=++%++=:*=++%+*++:==+=*%=%+=%==%:::::::+%==@#####@#@@##@@@@%**::========%====+====+**===%%##@########@@%===+%%+:::::--:::::-:::::::-:-:------:-::--::-----::::::----:::-::::----------------------::-:+%@*-----
---:-:+%%*::::::--:::::--::-::-:-:::::::::::::::::::::::::::::::::+%==@####@@@####@@%%+**:::=%===%%=%%%%@%@%%@@@=@@##@#########@@#%=+%++*:::-::---::::--::::::::-:--::-:::::----:-::--:-::--:-:::---:::::------:--::-------::--:*%%*-----
---:::+%%*::::::::*::::::-:::*:-:::::::::**:::::::::::::::::::::::*=#@+####@@@##@@%%%%%*::::**%%==%@@@@@%%@######################@=+@%+*::::::::::--:-:-:::--:-::-----:::----------:---:--::*:*:::::*+*++*:--::::*+++++*::::::::*=%+-----
--:-::*%=+:::::::**==%=**::*+%++++::+=+%*=%%*::::::*:::::------::::*+%+=@@##@@@%%@#=@===*::**:+*=%=%@#@@@@@############@##@###@%%=+%=+*---:---------------:---::--:-::--:::------------:=%%%%%@:*%%%%=:=%@%%=:+%@@%%-=%%@@=:-:--*%%+-----
----::*%%+:::::::*++=+==%=+==%%%%%=+=%===%%+%=+==*:-::---------:-::::+%@=@%%@%%%%%@#=%%+=%*:**:::**%@@@##@@#######@##@%@##@@@@%==+@=+*-----:::::-**:::+::::-:++=*::+:--++::--:+--:----:-::%%%%@*%@%@%=:+%%@%%+%@%%%=:+%@@%%+:--:*=%*-----
--::::===*::=:::::::::++%+******:++=*:=+*+*+++*+*:::::::::++++++++::::+@+=%%%%===%%@%=%===+%*:+*::***@#####@######%####===%=====%=%+::-:-::::::::--*@*:*+*==*+=*::+=:::%=*+++%+===::::::::%%%@%*%%%%%=:+%%@%%*%%%%%=:+%%@%%*::::+=@=-----
----::=@=*:+*+*+::::::::::::::-::*:::::::::::::::::::::::::*=+=++:-::::==%%=%=====%%%%%%==++=%::*****++=%@@@#####=%######%====+%%=+::-:*=::::::::---:--:*:-::::::*:::**---:---:----:--:::=%%%%%=:=%%%%:=%%%=:::+%%%%*=%@%=:---::*@%=:----
---:::+@@%:::::*+=@@%%%@*:=#@%%@*@%%%#%:::%@%%%@*@%%@#=:::-::-::::-:-:::*=@===%====%=%@=%===+++=+::***+**++=%%%===###@@####==@=%=::::-:::::::::::---::-:+***+*+:=:**:*:*+*+**::---:-::::---:-:----::----::::::-:::-:--:::::::-:%@%@=-----
---:::+@@%%@=+::*=@%%%%@*#%%%%%=*%@%%%%@+#@%%%@=+@@@@@@@*:::::::::::::::::+=@+%=====%+%%+===++++===:::+==%+*++==%%###@@##@@###%=++++++++++++++++++++++++++++==++++++==================%%%%%%%%%%%%%%%%%@%%%@%%@%%===%%%===%@@%@@%@%=-----
--::::+%%%+=+==%=@#%%%@@*@%%%%%=%@@%%%%#=@%%%%@+%#@%@@%#*%%=@%%@%+%===#=@#%%%@#@%=%=@==%=%+%++++++===%++*:*======#@#@###########@@%##@@%@=@@==@%=%@%%@@%#%@@%%%@@@%@@%@%+%@==@%+@@%#@@@@@%@%@@%#%#@%%@%%%@%=@@%#@##%#%#@##@@%@@+%%%+-----
--:-:::@%@%%@%@%@%#%%%%@*#%%%%%%%#@%%%%@*#%%@%@+=#@%@@@@*#%@@@@@#%@@%#%@%=%=====@%#==@=%==++%%++++++==+=%==+===@##@+****++=#:*#*:@=::%@%:+%=##+:%*:@=:+#=#*:*%#+:@+:%=:%*:=@:*%=#+:@+:=@=:%+:=::#=:%=:%##+:%#%@*:%@*:=:+#*:::=#%@@%*:----
--:-::+=#@=@%@#=%#%%%%%%@@%@@%%@+#%%@@++%#%@@%%@+#%@@@*=@##@##@##@@%@@=%@@#@%@@#%=%#%#%+===%=%@=++==+++++==%%%==%%=%=*:*+*+*%*%*=@+@=*@=*+=*@@+*=**=@*:%%%+@+*@**=*+@+*+=*==++=*%+*=+=#@++=+%#@==+@#==%=%==%%%%%%%%%%%%%@%@%%###@=@=:----
--::::+#@=@@%@%=++++*+*++**%%=+++*+=%@##%%=%@=+++++=@%=@@@#%##@#@@#%@==%##@==@##@==@=#@+*=@==+**@+=*+==+++*+==**===@%%@=+=++*:##@@@###%@@#%=@=##%@@=%%%=%##@@%=%@@@%===@%%#@@#%%@%==%@@@@+%@@@@===%%%#@%@@%@%==%@#@#%=@@@@@===@+%##=:-:--
-----:+#@@#%==@@@%@@%%@@%@@@@@@@@@@@@@@@%@@@@%@@%@@@%%=%%%%%%%%%%%%%%%%==============@@===@##===%===+++**+==+====##@==%#%==%%%%%%%===========+++++=++=++++++++++++=++++=+==++++++++=+=====++++===+++++++++++++++++++++=++++*=%%%%%%+-----
----------:--:-:-:----:-----::------:----------------:-------:::::-----------------------:-----------------------:--------------:------------------------------------------------------------------------------------------:-------------
-------------------:::::::::::::::******+++++++=======%%%%%%%%%%%%%%%%%%%%%%%===========+++++++++++++++++++++++++++++++++++*+++*****************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++*++++++++**: