######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
####################################################++++++############################################################################################
##################################################+++++**++++############+############################################################################
################################################+++++++++*****+#####zzzzzzzzzzz#######################################################################
###############################################+++#zzz##++**+**++++++##zzzzzzzzzzz####################################################################
##############################################**#zzzzzznz#++++++#zz###++++#zzz####+###################################################################
############################################ii*#zzzzzzznnnz+++++*#zzzzzz#++++#zz#++++#################################################################
##########################################*ii*#zzzzzzzzzzz##+++***#zzzzzz++++++#zz#++++###############################################################
#########################################iii*###zzzzzz#+++++++*****#zzzzzz#++++++zz#+++++#############################################################
#######################################*iiii+###zzzz#+++++++++******zzzzzzzz++++++zzz#+++++###########################################################
#######################################*;iii####zzzzzzz##++++#+******zzzzzzzz++++++#zz#+++++##########################################################
######################################*ii***#####zz##+++++++##+******+zzzzzzzz++++++#zz#++++++########################################################
####################################i*******######+++###zz#####+******#zzzzzzzz++++++#z#+++++++#######################################################
####################################i*******+###+++#zzzzzzz#####*******zzzzzzzz#++++++zz#+++++++######################################################
###################################**********#++++znzzzzzzzz####+******+zzzzzz###++++++zz#+++++++#####################################################
###################################***********+++#nnnzzzzzzz####********#zz######++++++#z##+++++++####################################################
##################################*************++nnnnzzzzzzz#####*******+zzz#+####++++++###++++++++###################################################
##################################***********+#znnnnnnzzzzz######********####+++##++++++####++++++++##################################################
##################################+******+***zxxxnnnnnzzz#########*******+####+++#+++++++###+++++++++#################################################
##################################++***+++++*####nnzz#############********####+++##++++**####+++++++++################################################
###################################++********######################******######+++#+++***+###++++++++++###############################################
###################################++**********####################*****+######++++++****+####++++++++++##############################################
####################################+************+W#################****+######++++++*****####+++++++++**#############################################
####################################+************z@@################****#######+++++******#####+++++++****############################################
####################################**************M@@################***+n######+++******+#####+++++++*****#################################zzznnnn###
####################################*+********+***+@@@###############****nz#####++******+#######+++++++*****###############################zzznnnnx+##
####################################*++*******+++++*@@@###############***zn#####+******+#########++++#++++****#############################zzzznnnx+##
####################################++++******+++++i@MW@###############**+nz###++******+#########+++++++###+***############################zzzznnnx*;#
####################################++++******+++*+##MM@@##############***zzz#++++*****+##########++*+++++##z#**###########################zzzznnnzii#
####################################+++++******+++####MM@###############**+zz#++++*****+###########+*++++++#zzz#**###########################zznnn*ii#
#####################################+++++*****+++*###MM@################ii#z#++++******##########+++++++++++zznn#*#######################**+#znn#iii#
######################################++++*****++++####W@################ii*##++++******+########+++++++++++++*##x**#######################*+znnziii##
#######################################++++****++++####@##################ii+##++++*****+#######++++++++++++++++*##*########################+zn#iiii##
#######################################+++++***+++++#######################ii+##+++******+######+++++++++++++++++**#########################+z*iiiii##
####################W@@###############++++++***+++++########################i*+##++*******#####+++++++++++++++++*****i#####################*+*iiiii:##
####################W@@@W#############+++++++**+++++#########################i*+##++******+###+++++++++++++++++*********i################iiiiiiiiii###
##############@@W###M@WMxz###########++++++++**+++++*#########################i*##**********+++++++++++++++++++*************ii;:###:iiiiiiiiiiiiii;###
##############@@@@###z+++++#########++++++++++*++++++##########################ii##**********+++++++++++++++++****************iiiiiiiiiiiiiiiiii*i####
###############Wn@W+#+++++++########+++++++++++#++##+###########################ii##***********++++++++++++++****************iiiiiiiiiiiiiiiiiiii#####
###############@;zM+++++#+z#+######++++++++++++#++##+############################i###*************+++++++++++***************iiiiiiiiiiiiiiiiiiii######
################*`*+++++##zz#+####+++++++++++++#####+#################################**************************************iiiiiiiiiiiiiiiiiii#######
################n, *+++##zzzz#+###+++++++++++++#####+##################################************************************iiiiiiiiiiiiiiiiiii########
#W@WM##########++* `+##+++##zz###+++++++++++++######+###################################**********************************iiiiiiiiiiiiiiiiii*#########
#@nMx+++++++#++++#: .#z##+++#####++++*+++++++############################################*********************************iiiiiiiiiiiiiiii**##########
#@@M#++++++++++++++:`izzz+++++++++++++++++++##############################################*******************************iiiiiiiiiiiiiii***+z#########
##n####++++++++++++;..#zz#++++++++++++++++++###############################################*****************************iiiiiiiiiiiii******zn#########
##`,+zz###++++++++#+#*;zzz+++++++++++++++##########+########################################**************************iiiiiiiiii**********#zn#########
###` ,*zzzz##++##zzzz+,#z#++++++++++++++#######zzz###########################################******************iii**+++++++++++++********+zz+#########
####`  `:*zzzzzzzzzzzzz+z#+++++++++++#+#######zzzz+############################################***************iiiiiii*+++++++++++*******+zz*##########
#####`   `:#zzzznxWnzzzzzzz#++++++++##########zzzz##############################################**************iiiiiiiiii**++++++*******##+ii##########
#######`    :zzzznMWzzzzzzzzz###+##zzz#######zzzzzz###############################################***********iiiiiiiiiiiiiii************iii###########
#########`   .+zzzzzzzzzzzzzzzzzzzzzzzz#####zzzzzzx################################################*********iiiiiiiiiiiiiiiiiiiiiiiiiiiiii############
##########`    :+zzzzzz+i#i;;i#zzzzzzzzz#zzzzzzzzM@##################################################******iiiiiiiiiiiiiiiiiiiiiiiiiiiii##############
###########`     .:;;:.`.`....:;ii+zzzzzzznzzzzzn@@####################################################***iiiiiiiiiiiiiiiiiiiiiiiiiiii################
############          ``` ```.....zzzzznnnnz#zzzW@@#######################################################iiiii##iiiiiiiiiiiiiiiiiii##################
##############                 `.;nnnnnnnnzzzzzz@@###########################################################iii#####iiiiiiiiiii######################
################  ```.        `.,nnnnnnnnzzznnz@@@####################################################################################################
###################++#z*:````..:znnnnnnnnzznnz#@@@####################################################################################################
##################+##nxxxn#*i;+nnnnnnnnnnnnnz##@@@####################################################################################################
#################+#nnxxxxxxnn#######nnnnnnn###@@@#####################################################################################################
################+nMMxxxn############znnnn#####@@@#####################################################################################################
###############WM@Wxn########################@MM@#####################################################################################################
#############MM@@@###########################MMW@#####################################################################################################
###########MMW@@@###########################@MW@######################################################################################################
##########MMW@@#############################@W@@######################################################################################################
########MMMW@@##############################@@@#######################################################################################################
#######MMM@@@#########################################################################################################################################
#####WMMMW@@##########################################################################################################################################
#####@@@@@@###########################################################################################################################################
#####@@@@#############################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################