::::::::::;::::::::::::::::::::::::::::::::::::::::::::::..:::::::::::::::::::::::::::::::::::::.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;++xxxXXXXXXXxxxXXXX$$$$$X
;::::::::::::;;;:::::::::::::::::::::::::::::::::::::::::::::::::..:.:::::::::::::::::::::::::::::::::..:.:::::::::::::::::::.:::::::::::::::::::::::::::::::::::::::;;;;;++xxXXXXXXXxxxXXXXX
;;:;;;;;:::::;;;;;;;;::;;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;++++xxXXXXXXxx
;;;::;;;;;::::;;;;;;;;;;;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;:::;;;;+++xx
;;;;;;;;;;;;;;;;:::;;;;;;;;;;;;;:::::::::::::;:;;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;
;;;;;;;;;;;:::::::::;;;;;;;;;;;;;;::;:::::::::;:::::;::::::::::;;:;;;;;:::::::::::::::::::::::::::::..::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;
:::;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;:;;;;:::::::::::::::::::::;:::::;;;;;:::::::::::::::::::::::::::::::::::::::::::::::::.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::;:::::;;;;
::::::::;;;;;;;;;;;;;;;;;;;;;;;:;;:;;;;::;;;;;;:::::::::::::::::;:::::;;;;;:::;:::::::;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;;;;;;;;:::;;::;;;;;:;;;;;;;;;;;;;;:::;;;;;;;;;;;;:;:::::::::::::;;:;;;:::::::;;::::::::::::;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;::
;:::;;;;;;;;;;;;;;;:::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;:::::::::::::::::;;:::::::::;;;;;::;:::::::::::::::::::::::::::::::::::::::::::::::::::;;;;::::::;;;;::::::::::::::::;;;::::::::::::;;;
:;;;;;;;;;;::;;:::::;;;;;;;;;;:::::;;:;;;;::;;;;;;;;;;;;;;:::::::::::::::::::::::::;;;;;;;;;::::::::::;:::::::::::::::::::::::::::::::::.::::::::::;;::;;;;;;;;;;;:::::::::::;;;:::::::::::::
::::::::::;;:;;;:::::::;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;:::::::::::::::;;:;;;;;;;::::::;;;;;::::::;;:::::::;;;;;;:::::::::::::::::::::::.:::::::::::;;;;;;;:;;;;;;::::::::::::::::::::;;
:::::::::::::::::::::::::::::::::::;;;;;;;;;:::::::;;;;::;;;;;;;;:;;::::::::::::::;;;;;:::::::::;;;;;;:::::::::::::;;;;;::::::::::::::::::::::::::::::::::;;:;:::;;;;;;;;:::::::::::::::::;;;
::::::::::::::;;:;::::::;;:;:::::::::::::::::::::::::::::::;;;;;;;;;;;;;:::::::::::::::::;;;:::::::;;;;++;;;;;;;;;;;;;;;;;:;:::::::::::::::::::::::::::::::::::::::;;;;;::::::::::::::::::;;;
::::::::::::::::::::::::::::::;;;:::::::::::::::::::::::::::::;;;:;;;;;;:::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;:;;;;;;;;;;:::::::::::::::::::::::::::::;;;;;;;;;;:;;:::;;;;;;;;;;;;;
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;::;::::::::;::;:::::::::::::::::::::::::::::::;;;;:::::;;::;;;;;;;;;;::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;:::;;;
::::::::::;;;;:;;;;;;;::::::::::::::::::::::::::::::::::::::::::::;;;::::::::::;;;;:::;;:::::::::::::::::::::::::::::::::::::::::;::;;;;;;;;::::::::::::::::::::::::::::::::::::::;;;;;;;;;;:
;::::::::::::::::::::::::::::;::::::::::.::::.:::::::::::::::::::::::::::::::::::::::::;:::;x+++;;:+XXXxxxx+;;:::;+;:::::::;;;:::::::::::;;;;;;;;;;::::::::::::::::::::::::::::::::::;;;;;;;;
::::::::::::::::::::::::::::;:::;;::::::::::::::::.:..............::::::::::::::::::::;;;++;:::;x$X$&&&&&&&&&$+:;x$&&:...;;::::::::::::::::::::::;;;::::::::::::::::::::::;;;::::::::::::::::
................::.:::::::::::::;:::;;;;;;;;;;;;;;:;;;::::::::::::...:::.::::::::::::;;+;:::::::;xx;;+++xxX$&&$X&&&&&Xx++&&$$$XXxxx+:::::::::::::::::;;;;;;:::::::::::::::::::::::::::::::::;
:::::................::::....:.::...::::::::::::::::;:::;;;;:::::::::::::.:..::::::;++;::::::::::+x;::::::::::;+++;++;++x$&&&&&&&&&$;;;+::.:::::::::::::::::;;;::::::::::::::::::::::::::::::
::::;;:::::::::....::::::.......::::::::::::......::..::.:::::::::::::::::::::::::;++;;::::::::::;+;:::::....:::::::::::::::::;;+xx$&$&&$$x:.::::::::::::::::::;:::::::::::::::::::::::::::::
........:::;;::::::::::::::..:..............:::::::::::::::::::::::::::::::::::::;+++;;.:.::::::::+;::::;+;:::::::::::::::;:;:::::+XX&X++xxxx;.:::::::::::::::::::::::::::::::::::::::::::;;;
.......... .....::::;;;;;:::::::::............................::::::::::::::::::;++;+;::+X$$$$$$X+++;:..$&$$Xx+;::::::+XXXXxx+;;;x$$$$$$$$X;++:.....:::::::::::::::::::::::::::::::::::::::::
................. ........:;;;::::::;:::::::...............:....:......:::.::::::..++:+&&$$$&&&&&$$+::::+X$&$$x:::::;X$$$$Xxx;:::+X&&&&&&&&+xX;.::.....::::::::::::::::::::::::::::::::::::::
....................................::::::::::::::::::......:::;XXx+;:::::::::;;:..;::&$$$&&&&&$$$$$::::::;;:::++:.:X&&&&$$x+;::;;+$&$X$&$XX+++::::::::::::::::::::::::::::::::::::::::::::::
................................. ..... ......::;:::::::::::::.;X&&&&$:..:...;;:..;::XXXXXX$$$$$$$$$++xXX$X:..;X$+;;+;::        .x;+$X+:;X;:+&Xx;:::::;::::::::::::::::::::::::::::::::::::::
..... .....................................    . ......:::;;::::::x;++:::::::++;;;;;+++++++;;;++XX$$+$&&&&&Xxxx$&&XXXXXXXXX$$$&&&$$$&$$+::$;;&$x;::::::::::::::::::::::::::::::::::::::::::::
.......................................................       ....;;:::::::::::;;;;;++++++;;;;;;;;;+x&&&&&$$++;;;;::$&&$&$$&&&&&&XXxX$$X:::$+$$X+::::::::::::::::::::::::::::::::::::::::::::
... ....................  ....................................     .;.....::::::::::::;;;;;;;;;;;;;:..::;::::::;;;++++++++++xxx$&xx$xX$&;::;$$$X+::::::::::::::::::::::::::::::::::::::::::.:
............................................................:;;:::....+:;;::.......:::::::::::::::......;..::;++++++++++;+;;;;;;+$&$$$$&;:::X$X+;..::::::::::..::::::::::::::::::::::::::::::
......................................:+x+++++;;;::........+x++++++++++++;::........:;++++;:............:...:::;;;;;++++;;;;;;;::::+$&&&;:::;&$x;:::::::::::::::.......::::::::::::::::::::::
......... ..............    . ..........+&&&&&&&&&&X:+&&x.+xx+xxXXXx++x+;;::....:::+xxxx+++::::;+;::::;;;:::.:::::::::::::;;;;:::::::;X&+:::;$$&&$Xxx;:::::::::::::::::::..::::::..::::::::::
...........  ..... .....  ... ... ....+$&&&&&&&&&&&&&&&&xXxx+xXXx;::.;+++;:::::::::::;;;++;::::+;::::;+++;;::..:::::::::::::::::::::::.:&+::x+++x$X++:::::::::::::::::::::::::::::::::.::::::
.....................................XXXXXX$$$$$$$Xxx$&&&$$xX$X. .:+XX$x+;;;;;;;;;;;;;;;::...::::::::++++;;;:::::::::::::::::::::::::::::xxx+;;x$x:::::..::::::...:::::::::::::::::::::::::::
................................. ..xXXXXXXXXXxxxx+X$$&&&$$xx$&X+++x+&&xx++++++++++++++;:::::;::::::::;::::::::::::::::..:::...:::::::::::;;;xXXX+:::::::::::::::::::::::::::::::::::::::::::
...................................+$XXXXXXXXXxxx+X$&&$&&&$xxX&&$$$&&&Xxxxxxxxxxxxxxxxx::::;+;::::;++;;;;;;;;;:::::.....:;+;:::::;;;xxx;;:.xX;++x;........:;;:::::::::::::::::..::::....:::::
..................................:$$$XXX$XXXxxx+X$&&&$&&&XxxxXX$&&&&XX$$&&&&&&&&&&&&$X+;;;+;::::;+++++++;;;;;;:::::::+XXx++;+;+xxX$;;+&&$XXx+++;;::::;:::...  ......::::;;:::::::::::::.....
;;;;:.............................x$$$X$$$$XXXXxx$&&&&&&&XxxxXXXXX$&&&$&&&&&&&&&&&&&&&&&&&&&&$XXX$$Xxx++;;;;;;::;+XXXX&$x++;xXXXX$&X:+.+&&&&&&&&&&&&x++++++++++;:................:;;;;;::::::
;;:;:;;;;::::....................:$$$$$$&$$XXXXx$&&&&&X&&&&$Xx+;;;+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$x: :;xX$&&&&$x+::.+&&$&$x::x$&&&&&&&&&&&&&&$xxxxxxx+;:++. ..     ...............::
:;;;;;;;;;::::;::................+&$$$$$&$$$XXXX$&&x$x$&&XXXXXXX$x+x$&&$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&X;X$&&$$$&&&$$&&&&$$&$XXXXXXXXXX$$$$Xx+x&&XXXXxxx+::+;:........    .............
::;;;;;;;;;::;;;;;;:::...........$&&$$&&&$$$$$X$&&x$&&&&&&$$$X$$$&$$&$&$X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$&&&&&$&&&&&&&$$$&&$:+XXXxxxxxxxxx++xX&&XxXXxxx:.;+x;...................  ..  
;;;;;;+++++;;;;;;;;;;;;;:..  ...:&&&&&&&&&$$$$$$;x$$&&&&&&&&&&&&&&&&$$&X+$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$&&&&&&&&&&$$$X$$$$&$X$XXXXxxxxxxxx+xX$&&XxxxxX+ :++Xx.........................
+++++++;;;;;;;;;++;+;;;;:;:::...+&&&&&&&&&&&&$$$X$&&&&&&&&&&&&&&&&&&$&&$;x$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$&&&&&$$$&$;++;:...:;x$$$&&&$XXX$xxxxxxx++x$&&&XxxxXx: ++x$x.........................
x++++++;;;;;;;;+;;;;;;;;::::::::X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&XXXX$$&&&&&&&&&&&&&&&&&&&&&&&&XxX&&$$&&&&&$&&xx$$$$$$$&&&&&$$XXXXXxxxxx+xX$&&&XxxXXx.:x+X$x:........................
+;;;+++;;;;;;;;;;;;;;;;:::::.  .$&&&&&&&&&&&&&&&&&&&&&&$&&&&&$$$&&&&&&&&&&&&$$XXXXX$$$$&&&&&&&&&&&&&&&$xx$&&$$&&&&&&&&&&&$$$$$$$$$$&$$$$XXXXXXXxxx$$$&&XXXXX+.+xxX$+.........................
:;;;;;;;;+;;::::::::::....      $&&&&&&&&&&&&&&&&&&&&&&$xXXXXxxxxxx;x&&&&&&&&&&&&&&&$$XX$XXXXXX$$$$$$$XxX$$$$&$X$&$X$$$&&$$$X$$$$$&&$$$$XXXXXXXxxX$$$&$XXXXX;:xxXXX;.........................
::::;:::;::::::..       .::::::+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$&&&&X+&&&&$$&&&&&$XxX$$&&&$$$$$$$$$$XXXXXX$&$XXXXX++XXXXx;.........................
:::::::::;;;+++++;;;::.....:;;;;&&&&&&&&&&&&&&&&&&&&$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Xx&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$XXXxXX&&$$$$$xX$XXX+:.........................
..::::::::::::::;;;+++;;+;;;;;;+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$XXX&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$XxxXX$$$$$$&&&&&$$$&&&&&&&&&&&$$$XxxxX&&&&&&&X$$Xx+;..........................
::::::::::::::::;;::;;++xXXXxxxx&&&&&&&&&&&&&&&&&&$X&&&&&&&&&&&&&&&&&&&&XXXX&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$Xxx++;+xX$$&$$&&&&&&&&&&&&&$$x;++x&&&&&&$$$$X+::..........................
::::::::::::::::::::;;;;;;+xxxXxX&&&&&&&&&&&&&&&&$+xXXxX&&&&&&&&&&&&&:::XXX;+xX$&&$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$&&&&&&&&&&&&&&&&&&&&&$+:::x&&&&&&$$&$X;............................
:::::::::::::::::::::;;;;;;;;;+xXX$&&&&&&&&&&&&&$xxxXX$$&&&&&&&&&&&&&&&&$$$$XXXXx+;;+x$&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$X+;++xX&&&&&&&&&&&&&&&&&$+:.:x&&&&&&&$&$x:............................
      .::::.::::::::::::::.:......:::::::::::;;+xXXXX$$$$$$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$XXx++xX$&&&&&&&&&&&$$$$Xx+xXXXXX$&&&&&&&&&&&&&&$+:.;$&&&&&&&$&$x::............. .............
...............................................:...:...::::::;;;+xXX$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$X++xxxxxxX&&&&&&&&&&&&&&$+::x&&&&&&&$X&$x;............................
.....................................................................:::::::;;;+xX$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$&&&&&&&&&&&&&&Xx;;$&&&&&&&$$&$X+............................
.................................................................................:::::::::;;;;;++xXX$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$x+X&&&&&&&&&&&$x:............................
.....................................................................................:...:.::...:::.::.:::::::;;;;+xXX$$$$XXxx++;X&&&&&&&&&&&&&$Xx::::;;;++++x+::................::..........
..........................................................................................:....................::::::::..:::::::;++xX$&&&&&&&&&&x:...:.:::::....................::::::...::::
..............................................................................................................:..........................:...::..:.::::::.........................::::::.::::
................................................................................................................................................:::.................................:::::.:::
....................................................................................................................................................................................:::::....
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.................................................................................................................................................................................:::::::.....
......................................................................................................................................................................:::::::::::::.::.......
................................................................................................................................................................::::::::.::::::..............