------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------ ___ ___ .__ .__
-----------------------------------------======------------------------------------------- / | \ ____ | | | | ____
--------------------------------=++****%%%%%%%%%#*+=-------------------------------------- / ~ \_/ __ \| | | | / _ \
-----------------------------=*#%%%%@@@@@@@@@@@%%%%%*=------------------------------------ \ Y /\ ___/| |_| |_( <_> )
---------------------------=*%%%%%%%@@@%%@@@@@@@@@%%%%*=---------------------------------- \___|_ / \___ >____/____/\____/
--------------------------+#@%%%%%%@@@@@%%#%@@@@@@@@%%%%*=-------------------------------- \/ \/
-------------------------+%@@@%%%%%%%%%@@@%%@@@@@@@@@@%%%#=-------------------------------
-----------------------=+%@@@@%%%%%%%%@@@%###%@@@@@@@%%%%%#=------------------------------
-----------------------=#@@@@@@@@%@%%@@%*+==+*#%%%%%%%%%%%%%+-----------------------------
----------------------=#@@@@@@@@%@@%%%#+=-----+*#%%%%%%%%%%@%=----------------------------
----------------------*@@@@@@@@%@@%%%#+=---::::-+#%@@@@@@@%%@#=---------------------------
---------------------+%@@@@@@@@@@%#%%*=---::::::-=#%@@@@@@@@@@*---------------------------
---------------------#@@@@@@@@@@%%#%%+---:::::.::::-=+*#%@@@@@@+-------------------------- ___________.__ .__ .__
--------------------+%@@@@@@@@@%%####==----:::::::::::--=#@@@@@%-------------------------- \__ ___/| |__ |__| ______ |__| ______
--------------------*@@@@@@@@@@%#*##*==--====--:::--=====+%@@@@@*------------------------- | | | | \| |/ ___/ | |/ ___/
--------------------*@@@@@@@@@%%#**+=+*+=#%*=--:::-===*#*=*@@@@@%------------------------- | | | Y \ |\___ \ | |\___ \
--------------------*@@@@@@@@@%##+--------==---:::-==-===--@@@@@@=------------------------ |____| |___| /__/____ > |__/____ >
--------------------=%@@@@@@@@%*+=--:::::::::::::::::::::::%@@@@@=------------------------ \/ \/ \/
---------------------%@@@@@@@@%*=---::::.:::---::::-::::::-@@@@@@+------------------------
---------------------#@@@@@@@@@*=---::::::-+--::::::--::::=@@@@@@%+-----------------------
--------------------=*@@@@@@@@@*=----::-----==++=-=-:--::-%@@@@%%%%*=---------------------
--------------------=*@@@%%@%@@%+=------+*==++++=+++=----*@@@@@%#%%%*=--------------------
-------------------=*%@@@%%@@@@@*==-::::-=+=--.::-=*-::-*@@@@@@@##@@@#+=------------------
-------------------+#%@@@%%@@@@@@*+=--::::-=+*++*+=:::-#@@@@@@@@%%%@%**+------------------
-------------------+%%@@@%%@@@@@@%#*+==-::::-----:::-+%@@@@@@@@@@@@%#***+----------------- _____.___. .__
------------------=%@@@@%%%@@@@@@@%#**+==-:::::::::=%@@@@@@@@@@@@@@%*++++=---------------- \__ | |____ ____ ___.__.|__|
------------------#@@@@@@%%%@@@@@@%#**+++==-:::::-*@@@@@@@@@@@@@@@@@@%#++---=------------- / | \__ \ / < | || |
-----------------+%@@%@@@@@%%@@@@@%**++++==+=====+#@@@@@@@@@@@@@@@@@@%%%%#*=-------------- \____ |/ __ \| | \___ || |
-----------------#@@@%@@@@@%@@@@@@%*+++========--=*#@@@@@@@@@@@@@@@@%%%%#%%%+-=----------- / ______(____ /___| / ____||__|
-----------------%@@%@@@@@@%@@@@@@#*+====---------=+*%%%@@@@@@@@@@@@@@@@@@%%@==----------- \/ \/ \/\/
-----------------#@@@@@@@@@%%%%%%%*+===----:::::----=+#++*#%@@@@@@@@@@@%@@@@%=------------
--------------==+*@@@@@@@@@%%%%%##*+=----:::::::-::--=++::--=+#%@@@%%%%%%%%%*-::::--------
---------------=+*#@@@@@@@@%%%%###*+=---:::::----------=:::::::+%@@@%%%%%%%#=::..::-------
----------:::---=+*#@@@@@@%%%##***=---:--:::::::::::::..:....::-#@@@@@%%%%%+=-:...::------
-----:::::::::::-=*#%@@%%%%@%*+++=-::::--:::::::::::. ::....:-%@@@@@@%%@@#=-::..:.:-----
---::::::::..:::::-*#%@@@%@@@*++=---::---:::::::::.. .:...:::*@@@@@@@#%@@%*-:....:-----
--:::::::.::.:...::-*#@@@@@@@%=+=------:::::::::. :....::+#@@@@@#**###%#+:.::::----
--::::::..::......:-+%@@@@@@@%--::-----:::::::. :....:-+#%@@@@%%%#*****-::::----
--:::::::.:-....::-=#%%@@@@@@+::...:::::::::. .:....::=*%%@@%%%%##*=+=::::---- Φ▓▄, ▄█▓
---::::::.:-..:::-+%%%%%@%%%#-:... .. ..-.. :.....::-+#%%%%%%%#**==:::::--- ╙▀█▓⌐ ▐███▌
---::::::::=::::-=#%%%%%%%%*=::....... :. .:......::=+#%%%%%##*+=:.:::--- ,▄▓▀─ ▀██¬
---::::::::=::::-*%@%%@@%%#=........ .. ... .::......::-+*#%%%##*=-::.:::-- ▀╙
---:::::::-=:::-=*%%%@@%%#+:........ ....:. .:......:::=+##%%%#+=-:..:::--
----:::-::-=:::-=*#%%@%%%*+:.............:. . . . .. .::......::-=*##%##+--::..::--
----:::-::-=-:::-+#%%@%%#*+=.............:. . .. . .. .. .....:.......::-+###**+--:::.::-- ▓⌐ █
----::--::-=-::::=+%@@%#*+==-:............ ..................::......::-*##*+==--:::.::-- ▄▄▓█▌ ╟█▓▓φ
----:::-::-=-::::--*%@%%*+==--::.......... ...................:......::=##+=--=-:::::.:-- ▀▌ ,▓▀
-----:::::-==:::::-=+#%%*+=---::::...... . ..................:......:-+*=--::--:::::::-- ╙▀▓▄▄╓╓▄▄▓▀▀
-----:::::-==-:::---=+***=----:::........ . ...................:.....::++--:::--:::::::--
===--:::-:-==-:::::--=+==-............... . ...................:......:-+-:-::--::::::::-
=====-:--:-==--::::---=--:............... . ...................:......:---::::-:::::::::-