++++++#++++#++++#+++++++#++++#++++#++++##+++##+++#########nzzzz#####MzzzzzzzzMnnzzzzzx################################################################
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzW###zzzxzzzn##xzzzznM@###*###@nzzzz####+####+####+####+####+#### #### #### #### #### #### #### ##
###################################################nzzxxxzx####zzWzx#######WM#W#######zzzzzzzWWxzzzzzzzzzzzzzzzzzzz###################################
###########@M#########################################@*#########nzzW###Wzzzzzzzx####@nnzzzzzW*xzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
xxxxxxxxxxxx#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxW*WxxxxMMxzznzzzzzzn#Mx+##zzzzzzzz####zM*nzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
MMMMMMMMMMMx#MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMxxxxW##########@Wn#+++##+z+++++++Mxz++++++++++++++++++++++++++++++++++++++++++++++++++++++
###########@M#########################################################################################################################################
######################################################################################################################################n###############
######################################################################################################################################################
######################################################################################################################################################
##########################################################@###@#@#####################################################################################
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxW#########x@##@@W@@##########################################################
#######################################################################Mxxx########znxxxxxxxxxxMW@######################W#############################
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnxnxxxxnnnxnnxnxnnWMxxxW@@MxxWW#########M@MxxxnnnnnnnnnnnnnnnnnnnnWnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzznnnnnnnnnnnnnnMM#xxxxxxM###############@@###################################################