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