+++xxxfffffgggggggggggggggggggfgfg! * .fgfffffffffffffffffffffffffffxxxxxxxxxxxxxxx
fggVV%%####@@@@@@@@@@@@@@@@@@@###*  * .!%#######################%%%%%%VVVVVVVVVVVVg
gggVV%%####@@@@@@@#@@@B@@@@#####V   .: ..V%@###########%x!!f+#@%%%%%%%VVVVVVVVVVggg
ggVV%%%###@@@@@@@#%V#@@@@@@#####.    :.:. #V#######%%g:   *. x#%%%%%%%VVVVVVVVVVggf
gVV%%####@@@@@@B#Vf. .x#######%V      :..::%#####%V!         +#%%%%%VVVVVVVVVVVgffx
VVV%%####@@@@@@@@##%    :V#####f        .:.x#####V.          +#%%%%%VVVVVVVVVggffx+
VV%%####@##@@@B@#@@@f     .%###f        ... ####!            +%%%%VVVVVVVVVVggffx+!
V%%#####@#B%+ff@@@#@#..     *%%f         .  x#V.             V%%VVVVVVVgggggffxx+!!
%%%###@@@#g  ..:*+g%%!...     !x           .+V.             x#gxx!:    .!fgffx++!!*
%%%###@@##+.****::::!V*::::...              +.             *x!.         !gfxx++!***
%%%####@@@x*******::::!*::::::..            .                    ..    .:..:+!!!**:
V%%%%#####f:****!**::::::::::::..           .              .... .          .!!!**::
VVgVV%%%###: .*..:::*:::::***:**:          .:            ....             .!*!**:::
ggfxxx+fVV#%. .!:  . ::::*****:!*:         !            ...              .!*!***:::
fg:.:.:**::!+. :!*. .  ..:*!*****: . :: :!!*. ..       ....            .!!******:::
ff: ..*****::...::**. .   .!!**!!*!f##B@W%B#V+*:        .....:..     .!!!!*********
xfx   .*!**:::::::.::.     ::+V%V#B@WMBWB+!@BM##gf::...   .:..::.   *+!!!!********!
+xx+!:  ::*:*:::****::::   !!!@MMMW#+++gxf!!BMMMMM%+:.        ..    :*!!!!!!!!!!!!+
!++++++!! ::******!!!**!!*:+VV@WMMM@%Bg%%f::f@MWMMMB+!*::.         .    ..:*+!!!+++
!!!!!****:::::::::*****!!+fg@MWMMMMMBWB@B%Vx**#MMMMWBg::   .......::.....    .::+xx
*******::***::::::::****!f%BMMMMMMMMM@%M@W%MM#+BMMMW@V     ..::::**:::*:::::..... +
::*******************!!!+x@MMMMMMMMMMMMMWM@BMM@fMMMM@x*:...     :***************:::
::::********:::******!++xVWMMMMMMMMMMMMMMMMMMM##MMMMM@%+*::......::*********::...!g
.....::********:****!!+xf%MMMMMMMMMMMMMMMMMMMMMMMMMMB@MV+:        .:*****:   :+fVVV
.......::**********!!+++xg#MMMMMMMMMMMMMMMMMMMMMMMMMMWBg!!*..   ...:::.:!+g%%%%%%%%
.....:*!!******!!!!!!++xxfVWMMMMMMMMMMMMMMMMMMMMMMMMBBV*    .:..:********+f#V%%%%%%
...:!!!!!!!!!!!!!!!!!!!!+xxVWMWMMMMMMMMMMMMMMMMMMMMMWVx*    .     .:**!**: *fV%####
...**!!!!!!!!********!!+++xg#BMMMMMMMMMMMMMMMMMMMMWW@x+:.   .:. ...:******. .:V@###
...*!!!!!!!!!!!!!!!!!!!!+++ffg%%BMMMMMMMMMMMMMMMMW@Vf+!:.     .....:******:    f##@
...:::***!!!!!!!!!!!!!!!!!!++xxxV@WWMMMMMMMMWMMWBVf+!!**:   .      :******:..  +@@@
...::::::***!!!!!!!!!!!!!!!!+++xffgV#%gMB##%gffffx++!!*::..         ..::..   :V@#@@
:::::::::**!!!!!!!!!!!!!!!!!!!+++++xfx+xx+++++++++!!!!**::...             .!g#@#@##
::::::::***!!!!!!!!!!!!!!!!!!!!!!!!!+++!+++!!!!!!!!!*****::.::. :gfgfffggV%#@@@@###
::::::::****!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*!!!!*****:::..:  :V####@@@#@@@@@###
:::::::*****!!!!!!!!!!!!!!!+!!!!!!***!!!!!!!!!!!*!!!!****:: .  ..  x##@@@@@@@@@@###
:::::::*****!!!!!!!!!!!!!!++!!!!!!*******!!!*!!!********:.*:.   ..  x@@@@##########
::::::******!!!!!!!!!**!!++!!!!!!!!*!****!!!**!!**!!******.::*.. ::  +#%###%%VV%%%V
:::::******!!!!!!!!!!!+!!!!!!!!!!!!!!!!*!!!!!!!!*:g%+**!!*!****.: **. !gVVVVVgggx++
***********!!!!!!!+++++!!!!+!!!!!!!!!***!!!!!!*!*:V#@%x!!!!!*:**:::*:  +++fgggfx+!*
*********!!+++!++!+++!!!!!!x+!!!!!!!!**++!!!!!!!*:%#####V+:.** .  +g!::***+xgggfx+!
********!+++!+++++!!!!!+xxxxf!!!!!!!!!:#+!!!+!!!**%#######@gx::!:**!***::*!xg%####%
!!!!!!!+++++++xxxxxxxfggfxxg#g!!!!!!!+%@@f!!!!!!*+#@########Vf+***:**!!!+xxfV#@@@@B
!!!!++xxxxxxxxxfffffggggxxf%#Bg!!!!!f#@@@#+!+!!!!%#@####%Vgx!!****!+fV%VgggV%#@@@@@
!+++xxfxxxxfffffgggVVVgfffg@@@@%x+x%B@@@@@f!!!!+V#####%Vf+!****!+fV###@@@#####@@###