#########################################################@############################################################################################
######################################################M++#+z#############################@z+*+z@######################################################
#####################################################x+@@@@M+###########################@+zz#z#*@#####################################################
####################################################@*@MMMMWMz###########################z*;;;+#######################################################
####################################################xnWMMMMM@##########################W++;;;;;#*@####################################################
####################################################zMMMMMMMW#@########################M#*;;;;;++M####################################################
####################################################nxWMMMMM@##########################M#*;;;;;++M####################################################
####################################################W+@MMMMM@##########################@*#;;;;;zi@####################################################
######################################################n@WMW@#W##########################z##i;iz+n#####################################################
########################################################MMx+M############################z+zz#*z######################################################
#######################################################Wnzx@##############################Mz#zW#######################################################
########################################################@W###########@@+z#####@#############W#########################################################
########################################################@x##########x*@*i#####@iiz##########W#########################################################
########################################################@x###########ixzi#####@;iin#######W+**n#######################################################
########################################################@x##########@*+W+#####@i;;iz######M:::n#######################################################
########################################################@x########WWzMiM########n;;i+W#####MMM########################################################
#########################################################x#######WixxMzn#########Wi;ii#####+i+########################################################
#########################################################x#######@i;Mn#####@@#####W;;*######@#########################################################
##################################@x##@W#################M#######@i;x###@n+**+x####z;i#####@M#########################################################
##################################n+##nzM@###########M###M#######W;;@@WWMxnnxxxMW@#M;i#####@M##@@###############@@####################################
################################@@x+@@+M+W#########x*+###M#######Mi#Mz*;,..*:.,#zMMMiiW####@W##W*z@##########@@@WW@@@#################################
#########################MxW##@@WWx#@@*Wz########W+*M####M#######Mxz#:.*++:,*..#;:i*xzx####@W###@zin########@WW@WW@WW@@###@W@#########################
######################@#::,:iWWMMxM#WM#xW@W@####niz@#####W####@@M#,.,#.:+.+;,``+.;..,#M@zM#@@#####M*+W####@W@WMWxxWxxWM@Wi:::*x#######################
###################xWM:::::::;@xWxM#@zxM@MW@####iM#W@#xn@xz#WM+xi...,*i;``:#```,*n,..+;x##nxW####@@@ziM###WWWWxMMxWxxWMW:::::::*W#####################
#################@Mi*@xz#z#*:,zWWxMz#+W@MxM@@@+*W##@@##+WzxW@Mx:...```````.+,,*+;i+`.+.:nzMnn+M@#W@##nix#@@xxWxMWxWxxW@*::*###zz*x####################
################x+@#i+@z#####;;#@WWz@+##Mx@M@+*@###@@#ni@n+izx:..``````....,#+:,+;:*.*..,nMzMM@#+#####xix@MWxMWW@W@WW@W:i####nxzxnM###################
################M*+@#:#Wz##z##;W@WWzMn#@W@M@#iW###x*#nMiW*;;x;..`````.......:...i:.**;...:xzn;M*+@#####zixWWWW@W@W@W@@ni#z#znWMWnxxM##################
#################Mzx@zz@WWW@@@@@@#WnzW#W@@@M+n###nMiW*@ix#;z+...````............*:..z,....ixx;Wiz#i#x###+iWW@W@W@@#@#@####++WzzzWMxxW#################
##############@xxxxn#++**++**iiin#@WW##W@@@MW@x+W+@*nzW+zx+n,..````..*xx+,..;nx#+,.........zMiMix*;;;;#M@n+@W@W#######n##**xn++++MWMM#################
##############WMMWWWMMMWWW@@@@@@########@#*+MiiixzM#+WWz+Wn*..````..*WnnM#.:WnnxW....*i,.,;iMzniW##+*i;;izW@@W########n#+*+W+++zxWWxn#+W##############
###############MMxnMW;*@##@##M#x########zM**MnM@#Mzxi@@xi@x,..```...n*nMMM.#MMx#x,....:#,i*;xx#*@@@@@@@Wn#i#W@########n#**MzzMWxz**#nM@###############
#############x@Mxz#*nM;+@+nM+W#M#######WnM+*@WMnM@+WixWWiMz...```...z.i*:x.+#,+ n,....,##+zi+@*#WxMxnxMxM@W+in@#######n+*+@Wx#i+nW@@xxx@##############
############@i+M@n+**nM*#@+MW@MW#####@M#xx*;@nnnn@+W*#@#*z*..,;:....:xxxn;.,nz#z+....,+:.,++iMinWnnnxnxnnxn@##xM@#####x+xWxznxW##W@@WWWMM#############
#############M+i#WM+**nM*#@+WzzW####@xx+xzi,WnxMnMnxz*@#+zi.**,`.....,WW,...,nM+.....::..:;#:niMWMnnMxnxxnxM@#xxM#####@#@Wxn#+***++###z##W############
#############M@xi,#@n**nM*#@#@#WW@##Mxn*Mzi,WxxxnxM+n,M##z*+z,``.:*#:,MM.....zn*.........;z**xi@WxnnxxnnxnnxWWxxx@###Mz+i*+znMWW#MxxxMMWW#############
############Wxxx@z::xWz*@M*#WnW@xxx#xxxnWn+:MWnnMn@:W,#@xzi:,+`.*Wxx*.MM.....zxi.zMMx:..;;;,*x+@WnMxnnxxnxxnx@MxxM@xMnzxWW@xz#+Mn****#zxx@############
############xxn#*n@n*+MWWMM*zWM#@WW@xxxx@nziM#W@@@@*M;;@Wz;..,#:ixznW+xM.....nM,:xzzM,;MM;;,,xzx#@@@WW@@M@@@@#Wxxx#MW#@#**#W#zxx******#nxM############
###########@xxz+***x@n*z@MMM*z@@###Wxxxx@nziM@****zzz#,W#zi..:WMxMzn@@xMznxxnMxiWWzzMzMnx;;,;nM+++++++++nx#nxxxxxx@####****#WMM*******#zxx############
###########Mxnz+****+x@n*n@@M*z####Mxxxx@nzixMM#+*+Wix,z#n+..;MW@WnWW@@MMnnnMMW@MWzn#MWxni*,*zW******#xWMWxxxxxxxx@#####****#Mz+******##xxW###########
#########WM@Wzzz##+***+x@z+M#M*@###MxxxxWxnixnWxxnz@;@;+#xn..;W#WxMnxMMxnnnnnxn@#WWW@@xMx++#z#M****nWMz+#nWxxxxxxxW####x****#MWn***+###znW@M##########
#########n#zM@Mzzz##+***+MWz#W@####WxxxxWxnin#@xxxxWzM#i@Mx:;xMxWnnnxWnnnnnnnnnWnnnnxWMWn;#;Mzn+#zn@z+++++@xxxxxxM@####W**#MM#+W++####zM@Mz#W#########
#########Wn###x@Wnzz###+**#MW#x######@MxMMxinzMMxxxMxzniM@#+nMMM@@WWWnnnnnnnnnnnWxnnMWxxMx;*zxWxxxx@#++++zMWxxxW@#######+*@z+++nxzzznW@x###n@#########
#########zxWn##+#M@Mnzz#z#+*#@@#########@MxizzzWxxxx@+Wiz#+x:*W#M#WMMMnnnnnnnnnnWxW##WW@zz,x*WWxxxxWz++zx@WMW@##########z*W#++#WxnM@M####nWx+#########
########W` ;MWniiiizM@Wxz##z#@###########WMi#n*@xxxx@+@**#z#z;WWW+ii*WnnnnnnnnnnWzxW*nMWi:#n*#@xxxxWMxW@WW@#############M#xxzM#W@Mz*ii*nWM;  x########
########;    :x@n*iiii#xW@MxM############@W*#niWMxxxWzx#iWx*Wz@MW#znxWxxxxxxxnnnWzM*z*@Mx*Wz##@xxxxM@@@@#################nx##@xz*iii*zWn:    ,########
#######n      ,WnWMz*iiii*nMW###############@@MW@#@WWMzxinWz#@@@x@Mnnniiiiiiiii*Wx@MznW@@W@Mnx#xMMW@@@###################@Mn+iiiii#M@n@       ########
#######,      `W*i+xWWn+ii###@###################xMWW@*@i+#n@nxxxxxnxxxxxxxxxxxMMMMMxxxxxnMWM+##@WMMM###################M##+ii+zM@x#i#n       `@######
#######        iW#ii#@znWWMxx####################@xxx@+W+i@#Mx#+++iii;;ii;ii;ii+++++++++#n@+@iWMxxxx@###################@znMM@xMW*ii#@:        *######
#####W`         :x@@n:   .;z######################@xxWnnzixn##@@WMxzz##+++++++#nnxxMWW@@@@x+MiMMxxx@######################n*:` `+W@@x:          M#####
#####i                     i#######################WxMW#Mi#M*@nxxxMMWWWW@W@@WWWWWMMMxxnxnMzzMinWxxW#######################*       .`            :#####
####x                      #########################Wx@*@i*@i@nxnnnnnnnxnnxnnxnnxnnnnxnnx@+x@i#WxW#########################                      n####
####,                      n#########################W@#M+iM#M@x@MWWMWWxMWxMMxWMxWnMMnMxW@i@#**@M#########################x                      .@###
###z                       W##########################@xnnizxnWMMMMWWWWWWWWWWWWWWWWWMMMMMM*@W#i@##########################@                       +###
##@.                      `############################@MWi*@@#@@@@WWWWWWWWWWWWWWWW@@@@@@xz##Mn@###########################.                      `W##
##*                       :###############################@W###############W@##############################################;                       ;##
#M                        *################################################M@##############################################*                        x#
#;                        #################################################M@###############################################                        ,#
n                         x################################################M@##############################################x                         #
:                         @################################################M@##############################################@                        `*
@x+.                     `#################################################M@###############################################.                    .*n@#
####W#;`                 :#################################################M@###############################################:                 :#M#####
#######@ni.              *#################################################M@###############################################*             `in@########
###########M+:           ##################################################M@################################################          ,+x############
##############Wzi`       x#################################################M@###############################################x      `;zW###############
##################x+,    @#################################################@nW##############################################@   .*x@##################
#####################W#;,##################################################@MM###############################################i#M######################
##########################################################################;,,*########################################################################
#########################################################################@***#########################################################################
##########################################################################z##M########################################################################
###########################################################################*+M########################################################################
###########################################################################W@#########################################################################
###########################################################################M@#########################################################################
###########################################################################M@#########################################################################
###########################################################################M@#########################################################################
###########################################################################MW#########################################################################
###########################################################################MW#########################################################################
###########################################################################MW#########################################################################
###########################################################################MW#########################################################################
###########################################################################MW#########################################################################
###########################################################################MW#########################################################################
###########################################################################@##########################################################################
#########################################################################M#++#W#######################################################################
####################################################################Mx##x+xWWn+W######################################################################
####################################################################*+W@+MM#zWx#@+MMx#################################################################
####################################################################niWM#@####@+W*W+iMxM@#############################################################
################################################################x+#z@*nM#W####@+WzMi+Wi*W#############################################################
###############################################################Miixznn+W+@z##zW+@M#iMzixMW############################################################
##############################################################xMzi*@n@:M#z@MM@#n@W:*WinM*W############################################################
##############################################################M*@+iz##+#@#+nz+z@@#,x**W*x#############################################################
###############################################################M#W::WMWi#@MnnM@x@:iM;W;*WW############################################################
##############################################################Mxxzn,+WW#MxxMMxnMn,M+Wi:W+x############################################################
##############################################################zinxM+iWMWzWnnnnn@*#WM+,x#ixW###########################################################
#############################################################@*ii#W@+#@@z@nnnnMMiW@xiz#izM*W##########################################################
#############################################################ni;*WM#W*MWMMxnnn@+##Mi+@WnW::x##########################################################
############################################################@*i;zWnM#x+@@xWnnxWiWW**WxWW;:x###########################################################
#############################################################x#WWxnnM##x@M@xxWzz@*ixWx@i;M@###########################################################
##############################################################WxnnnnnM@+@#W##@*W#i#@x@#+@@############################################################
#############################################################MnnnnnnnnWWx####Wn#**@x@##@xn@###########################################################
#############################################################nnnnnnnnx##########*MM@zz@xnnW###########################################################
############################################################Wnnnnnnnn@##########x#@nx@nnnnx###########################################################
############################################################MnnnnnnnM#############MMWnnnnnn###########################################################
############################################################xnnnnnnn@@############W@nnnnnnnW##########################################################
############################################################xnnnnnnMW@##############nnnnnnnM##########################################################
############################################################nnnnnnn@W###############xnnnnnnM##########################################################
############################################################nnnnnnn#W##############@Wnnnnnnx##########################################################
###########################################################@nnnnnnx@W##############@@nnnnnnx##########################################################
###########################################################@nnnnnnMW@##############W@nnnnnnx##########################################################
###########################################################@nnnnnnMW@##############W#nnnnnnx##########################################################
############################################################nnnnnnMW@##############W#nnnnnnM##########################################################
############################################################nnnnnnMW@##############W@nnnnnnM##########################################################
############################################################xnnnnnx@M##############W@nnnnnn@##########################################################
############################################################xnnnxWnW+#############W*WWxnnnn###########################################################
############################################################MnMx+,`Wi#############nz+,#Wxnx###########################################################
############################################################@z:...`n*@############*M:.`,#MW###########################################################
############################################################W.```..*zx###########W;W.```.,@###########################################################
#############################################################:.....,W############+##.`.`.*############################################################
#############################################################+......M@############W,.....M############################################################
#############################################################W.....iM#############M.....i#############################################################
##############################################################i.;n@################@+...M#############################################################
##############################################################W@#####################@#+##############################################################
######################################################################################################################################################