######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
####################################WxnnnxW###########################################################################################################
################################x+;.........;#M#######################################################################################################
#############################W+,...............:z#####################################################################################################
###########################W+......:*zxW@##@WMn+;:x###################################################################################################
##########################z,.....*x##############Wzx##################################################################################################
########################Wi.....iW#####################################################################################################################
#######################W:....;M#######################################################################################################################
######################W:...,n#########################ni+@############################################################################################
#####################W,...,x#########################W,#+*############################################################################################
####################W:...:W##########################n###z#WzM########################################################################################
###################@;...i@###################@#######xx#####@iz#######################################################################################
###################*...;@###################nM########@######@,x######################################################################################
##################n...:@###################M:#################*;######################################################################################
#################@,..,W####################;+#################n.M#####################################################################################
#################+...x####################W.x#################W.+#####################################################################################
################@,..+####################@n.@##################,:#####################################################################################
#################..;##################W#xWn:###################;.W####################################################################################
################,..x###############@##@#zMx;############M;iM###*.n####################################################################################
###############x..i###############x:x###nzW:############W..,@###.+####################################################################################
###############*..x##############z,x####Wi#;#############zi;@##x.:#####################################Wn+i;::;i+zW###################################
###############,.;##############W.z####@##MzM##################@..W#################################M+:..:*#nxxxz+ii+M################################
##############M..n##############i:#####@x##@####################;.###############################@z:..;zW#@Mz#++#zn@Wz+x##############################
###############.,##############M.z#######@#@WW##################z.:############################@z,..iM##ni,.........;z@MnM############################
##############*.+##############+.W#####n#n###@##################@:.z##########################x:..:x##z:..,;*+++i:....,+@WW###########################
##############;.M##############;:#####@;,n#######################z.,W#######################@*...+@#M;.:#M########@x#;..,#@###########################
############W#::###############,;######..@#####@z@################i.;######################M:..;W#@+.:n###############Wni.,#@#########################
############x#,+###############::####@:.*#######ni###############MM.i######################...###@;,z@###################@z:,#@###############WW######
############z@.x###############*.M###*.:@########:####@##########x,.z###################@*..,M##W:iW##########WMMM@#########x*,+M#######@@###W########
###########W#@.@###############n.i##n..:n########x.*@:zW########@;.,@##################@;..;W##W:z########@zi,,i*+++#n@#######@n*i*znnxMW###Wi@#######
###########x#W;#################i.##;.n#.:n#######n,,:..#@####@Mi.,M##################M:..####W;M#######@+,,+M#######@W@##########@@@@#####n:W########
###########n+W+#################@:.+.+##Mi,*#######W#*+zzn@#W#ii*z@##################x,.,x###W*@#######z,.+W#############################Mi;W#########
###########z+@n##################W:..x####@#n#######################################z..:W###@z#######W;.;W####################@W######Wz;.*@##########
############*@W###################@+.:W#####M#####################################@*..*@####x#######x,.*#######################Wn+**i:..iM############
###########+;#######################M;,z##Mn+####################################W;..z#####@#######z..############################@Mxxx@##############
###########+,#########################n,*@*zW###################################x,.:M##############..#################################################
############.@#########################@+;W####################################z..i@##############..##################################################
###########z.x###########################M+##################################@i.,z###############..*##################################################
###########n.#############################WW################################n,.iW##############z..;@##################################################
###########M.:#################Mz#n@########@#############################Wi.:n###############n..:@###################################################
###########@..W#######z@#####M;....:W######WM:#@########################@#.,#@###############x...x####################################################
############,.z#######x:*zz+;..,+xx+i######:Wx,,n######################n,,+@################W,..+#####################################################
############i.;########M;.....iW####z@###*x.@#@#,M##W#*i*+n@#########x:,#W#################@:..:@#####################################################
#############..W#########Wxnx@#######@@xxi#+####Mz#z+znnz#*;*W#####Mi:z@###################i...M######################################################
############M..#######################znnW@#######@@########WnW##xi*x######################...+#######################################################
#############:.,@#####################@###@x#i;;;i#x@#########Wz+n@##xz#zW###############n...:@#######################################################
##############..z#######################W+,....:::,.,*M#####WMM###@#,,*zz#z@############W,..,x########################################################
#############W..:######################z...:+M@####@Mz*iM########n,,#@#####@n@#########@;...##########################################################
##############i..z###################@i..;x############@xW#####x;.*W########*:#########*...i##########################################################
##############x..,@#################@;.,z###################@n;.iM##########WW########n...:@##########################################################
###############i..*#################i.,M#################Wz*:i#W############*;#######x....x###########################################################
###############M...n###############z.,M##############################@xzzM#W#@######@:...+############################################################
################*..,W##############:.x#############################@+,;zMM@@+n######*...;@############################################################
################@,..;#############x.*#############################M:,n#############z...,W#############################################################
#################z...+############+.M############################n.:W#############x....x##############################################################
##################;...z###########i,############################n.:W#############W,...n###############################################################
##################W,...n##########;;###########################n.,W#############W:...z################################################################
###################x....n#########*i##########################x.,M#############@:...*#################################################################
####################z....z########z;#########################x,,x#############@;...i##################################################################
######################....+#######@,@#######################x,,x#############@;...i@##################################################################
#######################....iW######+n######################n.,M#############W:...*####################################################################
########################....,z#####@*####################@+.;W#############M:...+#####################################################################
########################x:....:M####Wx##################x:,z##############x,...#######################################################################
#########################W;.....*W###@###############Mziiz@##############z...,x#######################################################################
##########################@#......*M###############################MnW#@*...;W########################################################################
############################M;......;z@#########################M#;#@#M:...+##########################################################################
##############################xi.......;#M##################Mz*,,#@#@+...:x###########################################################################
################################M*........,;+znMWW@WWMxn#*;,..in@##z,..,#@############################################################################
##################################Wz;......................;zW##@n:...*W##############################################################################
#####################################Wn+;,............,;+nM###@z:...*M################################################################################
##########################################@Mxxz##zznMW######M*,..:#W##################################################################################
########################################################Wn*:..;#M#####################################################################################
#################################################@Mxz+i::;*zx@########################################################################################
##################################################@@@@################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
######################################################################################################################################################
###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###
###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###@@@####@@@###@@@@###