###############################################################################################################M##########################MMMMNNNBBBBBNNNMMMMMM#################################
#############################################################################################################################################MMMMMNNNNNNNNNMMMMM################################
#######################################################################################################################MNBB$BBN###MMMNNNNNMM###MMMMNNNNNNNNNNMMM################################
######################################################################################################################NBMMNMB@$$$NBBBBBBB$$$$$BNM#MMMMMMNNNNNNNMMMMMM###########################
##########################################################################MMMMMMMMMMMMMM#############################NNM####N%^$@NNNNNNNNBBBB$$$@$BM##MMMMMNNNNNNNMMMM##########################
#####################################################################################MMMMMM##########################B0$M#M#M$$B$MMMMMMMMNNNB$$$$@@0$M####MMMMMMNNNNMMMMMMM#####################
#####################################################################################################################M^!^X@@NBNBNMMMMMMMMNNBBBBBBB$$@0N#####MMMMMMMNNNNNNMMMMMMMM############M##
#####################################################################################################################MB0/^X$BBNM#######MMNBBBNBBNBBB$@0B####MMMMMMMMNNNNNNMMMMMMMMMMMMMMMMMMMMMM
#################################################MM##########MMM######MMMMMMMM######################################NNNMMMMM#############MMNBBB$$BBBB$$@BMMNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
###########################################MNNNNNB@X%X@M#####MM####MB0X%/+++//%%XC0$N##############################MBNNNMMMM###############MMN$$@$BBBB$@0BNN@$MMM#########################MMMMM#
######MMMNNNNBNNM#######################MMNMMMMMMMNNNBB$$BMM#MMM$C/^!!^^^+++/////%%%%X@N###########################NBNNNMMMM###############MMNNB$$BBB$$@000BNM##################################
M###MMMMMMMMMMNB@B#####################MMMMM#####MMMMNNBB$@NM@%^!!!!^^^++++/////%%%%%%XXC$M########################B@XXC0NMM#############MMM#MMMMNNNNBB$@$######################################
NNNNNMM######MM$@@$###################NMMM##########MN$CX@$0+::!!!^^^^+++++////%%%%%%%XXXCC@B######################$/%%XC0$MMMM################MMMMNNNBB$$######################################
MMMBMM########M0:!/B#################MNMMMM########N0X+:'^00X!!!^^^^^++++++////%%%%%%%XXCC0000BM###################$+//%XC@@BMMM###############MMMMNNNB$$$M#####################################
###CNMM########N^.:@#################N$NMMM$######@///+!'^0CX^^^^^^^+++++++////%%%%%%XXXC0000000BM########MMMMMMMMMM/+++/%X0C0BM###############MMMMNNMMBN00$M###################################
###$@NMMM####MMN^'^M#################NBBMMBM#####N////+^+%X$%^^^^^^+++++++//////%%%%%XXXCC00000000BNMMMMM###########B+^^%%0C00@$MMMM########MMMMMMN$0NNMMN@B$###################################
####N$BBB@X/%@BBX%M##################M$BNNMMMM###M//+^^+XX/0%^^^^^+++++++++//////%%%%%%XXXC00000000@@BNMMMMMM########$++^^X%CC//0NMMMMMMMMMMMMMMMMNB%/0M#MMNM###################################
######NB$@CXC@$BN#####################N@BBNNB$$$BN0/+++/%C%%^^^^^^++++++++++////////%%%%%XXC0000@0CX%%%C0BM###########NX+/X%%C/%X$NNMMMMMMMMMMNNNNNBB00$$BNM################NB$BB$$$B###########
##########MM############################B@$$0%^:!%00%+/%//+^^^^^^++++++++++++++++++////////%%CC0@@X%%%%%XC0@N###########$%/XCCXXX0$BNNNNNNNNNNNNNBBNM#####################MBNBNNBX/@@0N#########
##########################################B$@@00C0@@%+++^^^^^^^++++++++++++++^^^^^^^^^+++////%XC0@@00000000CCB############BC++/XC0C0BBBBBB$$$BBB$NM######################N$$MBM##N@$N@@#########
#############################################MNNBBBNC^^^^^^^^^++++++++++++^^^^^^^^^^^^+//%XX0000CC0@@@@@@00$@$N##############N$0CCXC0BNNBB$@@@@M#########################$CB$B#####MMB0M########
####################################################B+^^^^^^^^+++++++++++^^^!!!!!^^+/%XCC0@@@000@0@@00@@@@@$N$CCB#################MM@0NM$MM0+C$$MMB$$$BN##################CC/CNM##MMMNN#########
####################################################MX^^^^^+++++++++++++^^!!!!^^+/X0@$@CC0$$@CCCC0@$@0@@@@00CCXX%@############MMMMMM%%@@MMNMMNN$NBMN$@%@$N#################@0%0B$NBBNM##########
#####################################################B+^++++++++++++++++^^!!^+/X@$@%^!!^+XNMNCCCC0@@$@@@@@00CX%%%%$##########MMMMMMM$///$M#MMMB@$NBMMM@$B$M##################MBBBNNM############
######################################################0+++++++//////++++^^+/%C@BC!''!^^+/%XCCCCCX0@@$BB$$@X+!^/%XC@M#################$/^/BN$B$0XCB#####MN$M#####################################
######################################################MX+++++/////////++++/%C$$+.':!^+/%XCC000CCXC@@@BBBB%!^+/XC000@M##################NBNNNM#M%^:CNNMNNBN##############################MMMM####
#######################################################N%+/////////////++/%X0$/':!^+/%%XC00000CCXC@@@BBBB%^+/%C0@@0CN###########################N@$$$BBM########################################
########################################################B%////XC%/////////%XC0/!^++/%XC000000CCXXX@@$BBBB$%%XC@$$@00M###########################################################################
######################MM#################################NX///XBB0X///////%%XC%+//%XC00@@@@000CCXX@$BBBBBB$00$B$@0@N##################################MMMMMMMMMMMMMMMMMMMM######################
###################MMMMN0XN###############################M$C%/0NBN0%/////%%%%X%%XC00@@@@@@00CCCC@BBBBBBBBBB$$@@@@C0BM###################################################################MMM####
##################NM####@./M###############################MN$CX$0CNB0%////%%%%%XC0@@@@@@@@@@@@$BBNBBBNNNNBBB$$@@$$$$@@BM#######################################################################
##################BNMM#MMC%M##############################NBNMBBBB%CBNBC%/////%%XXXCC0@@$$$BBBBBNNNNNNB$@0CCCC0000@@$$@00N######################################################################
##################MB$0/0@0N###############################MBBMN$BN@%CCXC@X////%%XXCCCXXC0@$BBBBBBB$0CXX%XXCCC00@@$$$$$@@00N#####################################################################
#####################NNN####################################MMMN$$N0CC//%C%//%%XXCCCCCC00@@@@CXX%%%%%%XXXCC00@@$$$B$$$@@@00N################MMMM################################################
#############################################################MMMNB0/%%++/////%XXCCCC000@$$0%//%%%%%%%XXCCC0@@$$$BBBB$$$@@000M###################################################################
##############################################################MMMBC%CC%%X%//%%XXCC00@@$$0%/%%%%%%%XXXCCC00@@@$$$BBBBB$$$@@@0@M########################MMNMNBBNN#######M###M#####################
################################################################M$%$BC%CCX%/%%XXCC0@@$0X%/%%%%%XXXXCCC000@@@@$$$$BBBBB$$$@@@0@NM#############MMMMMMM#M$00000B$BM###################MBBBM########
######################################MMNBCXB#######MM###########BX0@CX0@0X%%%XXC0@@@X///%%%XXXCCCCC000000@@@@$$$$$BB$$$$$$@@@0M#####################MBB0B@BN@@M#################MB0CC0B########
#####################################MMMMM$:!0######MM############$XXX%%C0CCXXXXC0@0%///%%XXCCCCCC000000000@@@@@@@@@@$$$$$@@00@M######################MN0B@BM@@M#################N0CCC0B########
####################################MBMM##M@/CM####################N@CX%X0$$CXXXXCC%//%%XXCCCCCCCC0CCCCCCCC00000@@$BBBB$$@$$BMM##################MMBB$BNNMNMMMM#####MMM#####M#M#MN$0XXX$MMM#####
#####################################B$$%C@0/$M############MMMM#MM###MMMB0$B$CXXXXX//%%XCC000000CCCCCCC000@@$$BBNNNBB$$@$M########MMMMMMMMM######M@C0CC$M##MMNNB$$$$@@@N###N@@000$BC%%%0BBBNNMM#
######################################MB@C@CNMM#########NNNNBBBNNNNNNMNNN@X@B@XX%%%%%%XC000@@@@@@@@$$$BBBBNNNNNBBB$@@@00B####M####MMMMMMMMM######M@C00C@M#MB$BB$B$CC@$@B###NCXXX0$@C%%%C$BB$BBNM
#########MM#M#######M##################M#M#M######MM###MNBNBBBBNNNNNNNNNNN0%CC%%%%%%%XC00@$BBBBBBNNNNNNNNNNNNNBB$$@@@@BMM################M#######M@C0@@$MM@@$MMMNBC+%$B$BM#N$@$@@@0X%%%C@$$$$$BM
#########M##MMMM####M##################M####MM###MMM###MNBNBBBBNNNNNNNNNNNN0/%%%%%%%XCC00$BNNN$@$BBNNNNNNNNNBBB$$$@@0$M#M##################M#MM#MM@C00C@MCC@BMMNNMN@$N0$@NMBB$$@@@0X%%%C@@$$$$BM
########################################MMMMNBBNMM#M##MNBBB$$$$$BNNNNNNNNNNNC/%%%%%%XC00@@$@0XC$BBBBNNNNNNBBB$$@@@00@M#M#M###################MMMMMB@@@@BM%@0NMMN#MMBBN@B$BNB$$$$@@00@@$$B$$$$BBM
######################################MMMMMM$$$$MNNNNNM$0@$0@0@0$NNNNNNNNNNNBX/%%%%%XX0@@$$$BBNNNNNNNNNBBBBB$$@@@@0$M#M#MM###################MMMMMMMMMM#MX%!^CBMMMMMMMNBBMNBBB$$$$$$$$BBBBNBNNNM
MMMMMMMMMMMMM#MMMMMMMMMMMMMMMMMMMMMMMMMNMMMM$BMMMBBBBNN$$$00@0@BNNNNNNNNNNNNNB%//%%%XXXC@$BBBNNNNNNNNNNBBBBB$$$@@@BMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM%^!:C@@BNNNNNBMMNNNNNBBBB$$$$BBNNNNMMM
MMMMMMMMMMMMMMMMMMMMMMMMBBMMMMMMMMMMMMM%%MMMNMM#MMMMMMMNBNB$$$BNNNNNNNNNNNNNNN@+///%%%XXC0@BNNNNNNNNNNNBBBB$$$$@0$MMMMM#MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB0://$$$BBNNMMMMNNNNMNNNBBBBBNNNNMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMNNBBBBNBNNN$/BMMMMMMMMMMMMMMBBBBCXXC@BNNNNNNNNNNNNB%++///%%XXCC00@BBNNNNNNNNBB$$$@0CX@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNBNNNNMMMMMMMMMNMMMMNNNNNNNMMMMMM#
MMMMMMMMMMMMMMMMMMMMMMMMN$@0@@@$$$$$@X%%@MMMMMMMMMMMMMMNNNNNN0/+%/%@NNNNNNNNNNN@^+++///%XXCCC00@$BBBBB$$$@@0000CCC@$NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM###
MMMMMMMMMMMMMMMMMMMMMMM$CC0@@@$$BBNNNBB$BMMMMMMMMMMMMNMMMMMMMN0/'.:%CBNNNNNNNNNB:!^+++//%XXXCC00@@$$$$$$@@@@@00CCC0CCNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB$$BBNMMMMMMMMMMM#####MM###MM#
MMMMMMMMMMMMMMMMMMMMMN0CX/X@$$BBNNMMMNNB$$MMMMMMMMMMNMMMM#MMBNNC^!:/C@BNNNNNNNB+  .'!^+//%%XXCC00@@@@$$$$$$@@@@@@0CX%0NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMB$$BBNMMMMMMMMMMMMMMMMMM#M#MM#
NNNNNNNNNNNNNNNNNNNNN0CC%%0$$BBNNMMMMMMNB$BNNNNNNNNBBNMBNMM#MMMB+X0C0@$NNNNNNN%        .:!00XXCCC00@@@$B0/00000CCCXXX%0NNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMM
NNNNNNNNNNNNNNNNNNNNB000@@$$BBNNMMMMMMMMB$$NNNNNNNN@$$B$NMNMMMNC:0@CX@@NNNNNN0.        .'/BB$00CCC000@$$C:%C000CCCXXXX%@NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNM
NNNNNNNNNNNNNNNNNNNN$0@@@$$BBNNMMMMMMMMMNBBNNNNNNNNB0@$$$$@BBN0^^%X0CX$NNNNN0'        ..:@NNB$BBB$@@@@@@$%^C000CCCCXXXX%@NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBBBBBBNNNNNNNNNNNNNNNNNNNNNNNNNNNM
NNNNNNNNNNNNNNNNNNNNB@@$$BBNNNMMMMMMMMMMNBBNNNNNNNNN$0@0%:.%@!!:^/X@%$NNNNBB:         ..%NNN$^CBBNBB$@@$$$!%000CCCCCXXX%XBNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBBBBBBBBBNNNNNNNNNNNNNNNNNM
NNNNNNNNNBBBBBBBBBBNNB$$BBNNMMMMMMMMMMMMNNNNNNNNNNNNNB@0CX!XC:.'!/C@BNNNBBNNX:        .!$NNNX:!0NNN$C0@$$$X+C000CCCCXXXX@NBBNNNNNNBBNNNNNNNNNNNNNNB@@$$$00@@@@$BNNNNNNNNNNNNNNNNBBBBBBBBBBBNNNNM
BBBBBBBBNNNNNNNNNNNNNNNBBNNMMMMMMMMMMMMNNNNNNNNNNNNNNNNNB@C0@/^+C$NNBBBNNNNNN%.:^^!:'''CNNNB+:!+@B@XC0@$$$@+C000CCCCXXXX0$$$$$BNNNNNNNNNNNNNNNNB$0@$BBB@CC+/++0CCBNNNNNNNNNNNNNNNNNNNNNNNNNNBBBN
NNNNNNNNNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMNNNNNNNNNNNNMNNNNNNNNMMMMMNNNNNNNNNNNBC.   '!/X0@BNNN@!!^+/%%%XCCC000C00000CCCCX0BBB$$$0CC0@BNNNNNNNNBBN$0$@BNNNNNBC+:'+0@CC$NNNNNNNNNNNNNNNNNNNNNNNNNNNNM
NNBBBBBNNNNNNNNBBBNNNNNNNNBBBNMMMNNNNNBNBNNNNNNNNNNBNNNNNNNNNNBBNNNNNNNN$%!.         .':^+%/!^^+/%%XXXCCCC0000000CCCC@BNN$@NBBB$0CXC@BNNNNNNN$%0@0@NNNNNNN$@@@$BB$@@NBBBBNNNNNNNNBBNNNNNNNNNNBBM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNBNNNNNNNNNNBBBBBBBBBBB$$$$BNNNNNNNN$%:            ....''::!^^+/%%XXXCCCCC000000CC0$NNN0!0NN$C%%%XXXX0$BNNNNX+C000BNNNNNNNNNBBB$$@0BNNNNNNNNNNNNNNNNNNNNNNNNNNM
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNBBBB$$$@@NN@XXX%%XXXXXXXCCCCC00@@$NNNN@^.              ...''::!^^+//%%XXXXCCCCCC00000@BNNN@'^BNC^^+//%%XCXX0BBB$':+X0@@0BNMMMNNNNNNBB$$$BNNNNNNNNNNNNNNNNNNNNNNNNNM
NNNNNNNBBBNNNNNNNNNNNNBBBNNNNNNNBBB$X%+C0%%%%X$NNNMMMMMMMMMMMMMMN$^     ...        ...'''::!!^+//%%XXXXCCCCCCC000$NNNNB^ ^@C!!^^+//%%XCCCX@N@ .::%^:%0$MMMMMMNNNNBB$BNNNNNBBBNNNNNNNNNNNNBBNNNNM
NNBBNNNNNNNNNNNNNBBBNNNNNNBNMMNBBMB$/ '.%%%%%X$MMMMMMMMMMMMMMMMN/.    ..''         ...''::!!^^+//%%%XXXXCCCCCC0$BNNNNN0. ..'':!^++//%%XXCCCCB^ .  ../0@BMMMMMMNNNNBBNNNNNNNNNNNBBBNNNNNNNNNNNNNM
NNNNNNNNNNNBBBBNNNNNNNNNBNNNMMMMMMBB$0:.^/%%%XBMMMMMMMMMMMMMMM@:    ..'::         ...'''::!!^++//%%%%XXXCCCCC0$BNNNNNN%   ..':!^+++//%XXCC0CX@!'!!:'%00BNNNNMMNNNNNBBBNNNNNNNNNNNNNNBBBNNNNNNNNM
NNNNNNBBBNNNNNNNNNNNNNNN@BBNNNNMMM0MN^'.!%%%%XBMMMMMMMMMMMMMNX.    .'::!.         ...'':::!^^++//%%%%XXXCC00@$$BNNNNNB^   ..'::!^++//%%XXCC0CX0X!/C.:/CBBBNNNNNNNNNNNNNBBBBNNNNNNMNNNNNNNNBBBNNM
BBBBNNNNNNNNNNNNNNNBBBBN$@$BBBNNNN@MN+':+X%%%XBMMMMMMMMMMMMMX    ..':!^:          ..''''::!^^++//%%%%XXCC000@@$BNNNNN$:   ..'':!^++///%%XCC0CCX0B@X%XC@$$BBBBBNNNNNNNNNNNNNBBBBNNNNNNNNNNNNNNNBN
BBBBBBBBBBBBBBBB$$$BBBBBB0@@@C++%@XN$!:!%X%%%XBMMMMMMMMMMMMB'   .'::!^^.         ....''::!!^^+++//%%XXCCC0000@$BBNNNN@'   ..'':!^^+///%%XXC00CCX0BBB$$@@@$$$$$BBBBBBBBBBBBBBBBB$$$BBBBBBBBBBBBBM
NNNNNNNNNNBBBBNNNNNNNNNNNNB000X+/CC@00^0C%%%%XBMMMMMMMMMMMMB'  .':!^++'         ....''':!!!^^+++///%%XXCCC000@@$BNNNN0.   ..'::!!^++//%%XCC00CCCX0NNNNNNNNNNNNNB$BNNNNNNNNNNNNNNNNNNBBBBNNNNNNNM
NNNNNBBBBBBNNNNNNNNNNNNNNNNN$@@00@@@@$NBX%%%%CNMMMMMMMMMMMMN/.'::!^++:          ....'''::!!^^++++//%%XXCCCC00@@$BBNNN@.   ..'::!^+/%XC00@00000000C$NNNNNNNNNNNNNNBB$BBNNNNNNNNNNNNNNNNNBBBBBBNNM
NNBBBNNMMMMMMMMMMMMMMMMNNBBBNNMMMMMMMMMN@X%%%CNMMMMMMMMMMMMMN+:!^^+/!            ...'''::!!^^^++++/%%%XXXXCC00@$$BBBB$:  ..':^/X0@$$$$$@@@@000C0BBBMMMMMMMMMMMMMMMMNNBBBBNMMMMMMMMMMMMMMMMNNBBBM
BBNNNNNNNNNNNNNNNNNNNB$$$BNNNNNNNNNNNNNNNB$0CCNMMMMMMMNNNNNN$+^++//!             ....''::!!!!^^+++///%%%%XXXXC0@$$BBB$+.'!/C@$BBBBBBB$$$@@@0000C@$$BNNNNNNNNNNNNNNNNNNNB$$$BBNNNNNNNNNNNNNNNNNNN