
   !:::::::::::::::::+::+::::::::::::::::::::+::++::::+++++++++++++::::+::::++++++++++++++++++++++++++++++++++++++++++++++++!
   !:::::::::::::::::+::+:::::::::::::::::::++:::+::::+++++++++++++::::::::+::+++++++++++++++++:++++++++++++++++++++++++++++!
   !:::::::::::::::::::+++::::::::::::::::::++:::+::::::+++:++++++::+::::::+++++++++++++++++++++:+++++++++++++++++++++++++++!
   !::::::::::::::::::::++::::::::::::::::::+:::::::::::+++++++++++:::::++:::++++++++++++++++++++++++++++++:++++++++++++++++!
   !:::::::::::::::::::++:::::::::::::::::::++::::::::::++::++++++:::::::::::::++++:++++++++++++++++++++++++++++++++++++++++!
   !:::::::::::::::::::++++:::::::::::::::::++:::+:::::::::+++++++::::::::::::::+++:+++:++:++++::+++++++:+::++++++++++++++++!
   !:::::::::::::::::::++++:::::::::::::::::+++::+::::::::::::+++:++:::::+:::::++++::+++++::+++::++++++++++:++++++++++++++++!
   !::::::::::::::::::::::++:::::::++:::+::++++::+:::::::::::::+++++::::::::::::+++++++++::++++::+++++++++++++++++++++++++++!
   !::::::::::::::::::::::++:::::::::++++:::::+:::::::::::::::::+++:::::::::::::++++::++:::+++:::+++++++++:++++++:++++++++++!
   !::::::::::::::::::::::::::::::::::::::+++++++:::::::::::::::+::::::::::::::::++::::::+:+::+:::++++++++::++++++++++++++++!
   !:::::::::::::::::::::::::::::::::++++++++++++++::::::::::::::::::::::+:::::::+::::::++:+::::::++:++++::::+++++++++++++++!
   !::::::::::::::::::::::::::::+++oooooooo%%%oo++++:::::::::::::::::::::::::::::::::::::+::::::::++:+:::::::++++++++++++::+!
   !:::::::::::::::::::::::::++++%%##%%###%####%oo++++::::::::::::::::::::+:::::::::::::::::::::::++++++:::::++::::+++++++::!
   !:::::::::::::::::::::+++++o%%#################%o+++:::::::::::::::::::::::::::::::::::+:::::::++++++::::++::::::++++++::!
   !:::::::::::::::::::+++++o%%#####################%o++:::::::::::::::::::::::::::::::::::::::::::+:+:::::::+::::::+:++++::!
   !::::::::::::::::::+++o%%%%###############%##%%%###%o+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++::!
   !:::::::::::::::::++oo%%%#######################%%%#%o+::::::::::::::::::::::::::::::::::::::::::::::++::+:::+::::::+:+::!
   !::::::::::::::::++o%%%%########################%%%%#%%+:::::::::::::::::::::::::::::::::::::::::::+::::::::+::::::::::::!
   !:::::::::::::::++o%%%%%%%#######################%%%%%%%++:::::::::::::::::::::::::::::::::::::::::+:::::::::+:::::++:++:!
   !::::::::::::::++o%%%%%%%%###########@#############%%%%%%o++::::::::::::::::::::::::::::::::::::::::::::::::::+:::::++:::!
   !::::::::::::::+o%%%#%%%####@@@@@####@######%%######%%%%%%o++::::+::::::::::::::::::::::::::::::::::::::::::+::::::++::::!
   !::::::::::::::o%%%%%%%####@@@@@@@###@########%%%####%%%%%%o++:::+:::::::::::::::::::::::::::::::::::::::::::::::::+:::+:!
   !::::::::::::+o%%%%%%%#####@@@@@@@##############%%####%%%%%%o++::+++:::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::::::::::+o%%%%%%%#####@@@@@@@@###############%%%%#%%%%%%%o+::++::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !::::::::::+oo%%%%%%%%####@#@@@@@@@#############%%%%%%%%%%%%%oo+++:::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::::::::++oo%%%%%%%##########@@@@##############%%%%%%%%%%%%%oo++:::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !::::::::++oo%%%%%%%%#########@@@@###############%%%%%%%%%%%%%%o+++:::::::::::::::::+::::::::::::::::::::::::::::::::::::!
   !:::::::+++oo%%%%%%%%####%###@@@@############%%%%%%%%%%%%%#%%%%oo+:::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::::::++oo%%%%%%%%%%%#%###@@@@@@########%%%%%%%%%%%%%%%%%#%%%%%o+::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::::::++oo%%%%o%%%%%%%%###@#@@@########%%#%%%%%%%%%%%%%%%%#%%%%%o+:::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !::::::++ooo%%%oo%%%%%%%%#####@@@@#%%#######%%%%%%%%%%%%%%%%%#%%%%oo:::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !::::::+oooooooooo%%%%%%%#####@@@##%%#######%%%%%%%%%%%%%%%%%%%%%%%o++:::::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::::+oooooooooo%%%%%%%%%##########%%######%%%%%%%%%%%%%%%%%%%%%%%oo++::::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::::+ooooooooo%%%%%o%%%%##########%%######%%%%%%%%%%%%%%%%%%%%%%%%oo++:::::::::::::::::::::::::::::::::::::::::::::::::!
   !::::++ooo%oooo%o%%oo%%o%%#########%%%#####%%%%%%%%%%%%%%%%%%%%%%%%%%oo++::::::::::::::::::::::::::::::::::::::::::::::::!
   !:::++ooo%%ooo%%%%%ooo%o%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%oo++++++::::::::::::::::::::::::::::::::::::::::::::!
   !:::+oooo%%ooo%%%%oooooo%%########oo%%%%%%%%%%%%%%%%%%%o%%%%%%%%%%%%%%oo++++:::::::::::::::::::::::::::::::::::::::::::::!
   !:::+ooo%%ooooo%%%oooooo%%%%####%ooooo%%ooooooooo%%%%#%oo%%%%%%%%%%%%%ooo+++:::::::::::::::::::::::::::::::::::::::::::::!
   !::+ooo%%%oooo%%%ooooooo%%%%%%%%oooooooooooo++ooooo%%%%%o%%%%%%%%%%%%%oooo+++::::::::::::::::::::::::::::::::::::::::::::!
   !::+oo%%%ooooo%%ooooo%oo%%%%%%%oo+++++++++++++++oooo%%%%%%%%%%%%%%%%%%%oooo+++:::::::::::::::::::::::::::::::::::::::::::!
   !:+ooo%%%oooo%%%oooooo+o%%%%%%o++++++++++++++++++oooo%%%%o%%%%%%%%%%%%%%ooo++++::::::::::::::::::::::::::::::::::::::::::!
   !:+ooo%%%oooo%%ooooo%ooo%o%%%oo+++++:::++++++++++ooooo%%%o%%%%%%%%%%%%%%%ooo+++::::::::::::::::::::::::::::::::::::::::::!
   !+ooo%%%ooooo%%oo%ooo+ooooo%oo+++++:::::+++++++++++ooo%%%o%%%%o%%%%%%%%%%%ooo++++::::::::::::::::::::::::::::::::::::::::!
   !+ooo%%%oooo%%%oooooo+ooooooo++++++::::::++++++++++++oo%%%%%%%oooo%%%%%%%%%oo++++::::::::::::::::::::::::::::::::::::::::!
   !+oo%%%ooooo%%%oooooo+ooooooo++::::::::::::+++++++++ooo%%%%%%%oooo%%%o%%%%oooo++++:::::::::::::::::::::::::::::::::::::::!
   !+oo%%%oooo%%%%ooooo+ooooooo+++::::::::::::+++++++oooooo%%%%ooooooo%%%o%%%%ooo++++:::::::::::::::::::::::::::::::::::::::!
   !+oo%%%%%o%o%%oooooooooooooo+++:::::::::::::+++++++++ooo%%%%ooooooo%%%%o%%%ooo+++++::::::::::::::::::::::::::::::::::::::!
   !ooo%%%%%o%%%ooooo%oooooo+oo++++::::::::::::++++++++++ooo%%%%oo%%%oo%%%%o%ooooo++++::::::::::::::::::::::::::::::::::::::!
   !oooo%%%%%%%%ooooo%oooooo+++++++:::::::::::++++++++++++oo%%%%oo%%%%o%%%%ooo%ooo+++++:::::::::::::::::::::::::::::::::::::!
   !ooooo%%%%%%%oooooooooooo+++++++:::::::::::+++++++++++ooo%%%%%oo%%%oo%%%%ooooooo+++::::::::::::::::::::::::::::::::::::::!
   !oooooooo%%oooooooooooooo+++++++::::::::::::+++++++++ooooo%%%%oo%%%oo%%%%ooooooo+++::::::::::::+:::::::::::::::::::::::::!
   !oooooooooooooooooooooooo+++++++:::.:::::::::+++++oooooooo%%%%%%%%%ooo%%%%ooooo+++++:::::::::::::::::::::::::::::::::::::!
   !oooooooooooooooooooooooo++++++++::.::::::::++++o%%%oo+ooo%%%#%%%%%ooo%%%%ooooo++++++::::::::::::::::::::::::::::::::::::!
   !ooooooo%ooooooooooooooooo++++++:::::::::::+++o%%%oo++ooo%#@@@#%o%%ooo%%%%ooooooo++++::::::::::::::::::::::::::::::::::::!
   !oooooo%%ooooooooooooooooooo+++++:::::::::+++o%%%o%%%%%#@@@@@@@%ooooooo%%%oooooooo++++:::::::::::::::::::::::::::::::::::!
   !oooooo%%ooooooooooooooooooo++++++:::::++++oo%%%%###@@@@@@@@@@@%ooooooo%%%%oooooooo+++:::::::::::::::::::::::::::::::::::!
   !ooooo%%%oooooooooooooo%ooooo++++++++++++++oo%%%##@@@@@@@@@@@@@%ooooooo%%%%oooooooo++++::::::::::::::::::::::::::::::::::!
   !ooooo%%ooooooooooooooo%ooooo+++++++++++++++o%%#%@@@@@@@@@@@@@#o+ooooooo%%oooooooooo++++:::::::::::::::::::::::::::::::::!
   !oooo%%%ooooooooooooooo%oooooo%oooo++++++++o%#@@@@@@@@@@@@@@@@#o+ooooooo%%%oo%oooooo+++++::::::::::::::::::::::::::::::::!
   !oooo%%%ooooooooooooooo%o%%o%%%%%%oo++++++o%@@@@@@@@@@@@@@@@@@#o+o%o%%oo%%%oo%ooooooo+++++:::::::::::::::::::::::::::::::!
   !ooo%%%o%oooooooooooooo%o%%%%%%%%%%%oo+++%#@@@@@@@@@@@@@@@@@@@#ooo%%%%%oo%%oo%%%ooooo+++++:::::::::::::::::::::::::::::::!
   !ooo%ooo%ooooooooooo+oo%%%%%%######o%#####@@@@@@@@@@@@@@@@@@@@%%oo%%%%%oo%%oo%%%%oooo+++++:::::::::::::::::::::::::::::::!
   !%ooooo%oooooooo%oooooo%o%%%#@@@@###@@@@@@@@@@@@@@@@@@@@@@@@#%%%oo%%%%ooo%%%%o%%%ooooo++:::::::::::::::::::::::::::::::::!
   !oooooo%oooooooooooo+ooooo%%@@@@@@@@@@@@###@@@@@@@@@@@@@@@@@%oo%ooo%%%%oo%%%%%%%%%ooooo++::::::::::::::::::::::::::::::::!
   !ooooooooooooooooooooooooo%%@@@@@@@@@@@#o+o#@@@@@@@@@@@@@@@%ooooooooo%%oo%%%%%%%%%oooooo++:::::::::::::::::::::::::::::::!
   !ooooooooooooooooooooooooo%#@@@@@@@@@@@%+++o#@@@@@@@@@@@@%o++oooooooo%%%o%%%%%%%%%%%ooo++++::::::::::::::::::::::::::::::!
   !oooooooooooooooo+oooooooo%#@@@@@@@@@@@%+++o%#@@@@@@@@#%o+++++oooooooo%%%oo%%%%%%%%%oooo+++::::::::::::::::::::::::::::::!
   !oooooooo++oooooo+++oooooo%#@@@@@@@@@@@o+++oo%#@@@##%+::++++++ooooooooo%%oo%%%%%%%%ooooo++:::::::::::::::::::::::::::::::!
   !++o++ooo++ooooo++++ooooo%%#@@@@@@@@@@#oo++ooooooo+::::::++++oooo+o+ooooooo%%%%%%%%oooo+++:::::::::::::::::::::::::::::::!
   !++o+++++++ooooo++++ooooo%%#@@@@@@@@@@%oo++ooooooo+:::::+++++oooo++++ooooooo%%%%%%%oooo+++:::::::::::::::::::::::::::::::!
   !+++++++++oooooo++++ooooo%%#@@@@@@@@@#ooo+++oooooo+++::++++++oooo+++++ooooooo%%%%%%%ooo++::::::::::::::::::::::::::::::::!
   !++++++++ooooooo++++ooooo%%#@@@@@@@#ooooo+++oooooo++++++++++oooooo+++++oooooo%%%%%%%ooo++::::::::::::::::::::::::::::::::!
   !++++++++ooooooo++++oo+oo%%#@@@#%o+++ooooo+ooooooo++++++++++ooooooo++++++ooooo%%%%%%ooo++::::::::::::::::::::::::::::::::!
   !+++++++ooooo%oo++++o+++ooooooo+++:+++oooo+++ooooo++++++++++ooooooooo+oo++ooooo%%%%%%ooo++:::::::::::::::::::::::::::::::!
   !+++++++oo+ooooo++++o+++ooo++++++::++oooo+++++oooo+++++++++oooo%oo%ooooo++++oo%%%oooooo+++:::::::::::::::::::::::::::::::!
   !++++++ooooooooo++++++++ooo+++++++++++ooo++::+ooo+++++++++ooooooooo%oooo++++++oo%oooooo++::::::::::::::::::::::::::::::::!
   !++++++oo+oo%oooo+oo++++ooo+++++++++++ooo+++++oo++++++++++oooooooo%%%ooo++++++oo%%ooooo++::::::::::::::::::::::::::::::::!
   !++++++o++oo%oooooooo++oooooo++++++++++oooooooo+++++++++oooooooooo%##%oo+++++oooo%%ooo++:::::::::::::::::::::::::::::::::!
   !+++++++++ooooooooooooooooooo+++++++++++++oooo++++++++++oooooooooo%%#%%oo+++oooooo%%oo++:::::::::::::::::::::::::::::::::!
   !+++++++++oooooooooooooo%ooooo+++++++++++++++++++++++++oooo+ooooo%%%%%%ooo++ooooooo%%oo++::::::::::::::::::::::::::::::::!
   !+++++++++oooooooooooooo%%%ooo++++++++++++++++++++++oooooo++ooooo%#%%%%oooo+++ooo%%o%%oo+++::::::::::::::::::::::::::::::!
   !++++++++oooooooooooooo%%%%%ooo+++++++++++++++++ooo%%%%ooo++oooo%#%%%%%oooooo+ooo%%%%%%o++:::::::::::::::::::::::::::::::!
   !++++++++oooooooooooooo%%%%%%ooo+++++++++++++++oooooo%%ooo+ooooo%#%o%%%oooo%%o%%%%%%%%%o++:::::::::::::::::::::::::::::::!
   !+++++++ooooooooo%oooo%%%%%%%ooooo+++++++oooooooooooo%ooooooooo%##%o%%%oooo%%o%%%%%%%%oo++:::::::::::::::::::::::::::::::!
   !o++++++oooooooo%%oooo%%%%%%%%oooo+ooooo%%%oooo++::o%oooooooooo%##oo%%%oo+o%%o%%%%%%%oo+++:::::::::::::::::::::::::::::::!
   !oo+++++oooooooo%oooooo%%%%%%ooooo++oooo%ooo++:::+o%oooooooooo%##%o%%%ooooo%%ooo%%%%oooo++:::::::::::::::::::::::::::::::!
   !oo+oo++oooooo%oooooo+oo%%%%%%oooo+++ooooooo+++ooooooooooooooo%%#%o%%%ooooo%oooo%%%%oooo+++::::::::::::::::::::::::::::::!
   !oooooooooooooooooooo++oooo%%%oooooo++ooooooooooooo+o++ooooooo%%#ooo%%ooooo%ooo%%%%%oooo+++::::::::::::::::::::::::::::::!
   !ooooooooooooooooooooo++oooooooooooo++oooooooo++++++++++ooooooo%%ooooooo%%%%o%%%%%%%ooo+++:::::::::::::::::::::::::::::::!
   !+ooooooooooooooooooo+oooooooooooooooooooo++++++++++++++oooooo%%%oooooo%%%%%%%%%%%%oooo+++:::::::::::::::::::::::::::::::!
   !+oooooooo++:+o+ooooo++oooooooooooooooooooo++++++::+++++oooo+o%%%ooooo%%%%%%%%%%%o%ooo++:::::::::::::::::::::::::::::::::!
   !++ooooooo++++o++o%oo+++ooo%%%%%%ooooooooo++++++++++++++ooo++o%%oooooo%%%%%%%%%%%%%%%o++:::::::::::::::::::::::::::::::::!
   !:++oo+ooo+++ooo++o%oo+++oooo%%oo+oo%%oooo+++++++++++++ooo+++o%%ooooo%%%%%%%%%%%%%%%%oo+:::::::::::::::::::::::::::::::::!
   !::+ooo+ooooooooooooooo++++oooo++oooo%oooo++++++++++++ooo++++o%%ooooo%%%%%%%%%%####%%o++:::::::::::::::::::::::::::::::::!
   !:::+ooooooooooooooooooo++++oooo%%oooooooooo+++++++oooooo++++o%%%%%%%%%%%%##%%%#####%o+::::::::::::::::::::::::::::::::::!
   !:::+ooooooo%ooo%%%%ooo%oooo%%%%%%oooo+++ooooooooooooooo+++++o%%%%%%%%%%%%###%%#####%+:::::::::::::::::::::::::::::::::::!
   !::::+ooooooooooo%%%%%%%%%%%%%##%%oooo+++++oooooooo++++++++++o%%%%%%%%%%%#####%%%%##%+:::::::::::::::::::::::::::::::::::!
   !:::::+oooooooooo%%%%%%%%%%%%%##%%ooo++++::++++++++++++++++++o%%%%%%%%%%#######%%%%%o::::::::::::::::::::::::::::::::::::!
   !::::::+ooo%oooo+o%%%%%%%%%%o%##%oooo+++::::+++++++++++++++++o%%%%%%%%%######@##%%%o:::::::::::::::::::::::::::::::::::::!
   !:::::::+oo%oo%o+o%%%%%%%%ooo%#%%oooo+++::::::++++::+++++:+++o%%%%%%%%%####@@@####%+:::::::::::::::::::::::::::::::::::::!
   !::::::::+o%oo%oooo%%%%%ooooo%%%oooo+++++:::::::::::+++++:+++o%%%%%%%%####@@@#####%%%o%%%o++++++:::::::::::::::::::::::::!
   !:::::::::+ooo%%ooo%o%%oooooo%%ooooo+++++::::::::::::+++:::++o%%%%%%%#####@@@####@@@@@@@#%%%%%%%ooo++::::::::::::::::::::!
   !:::::::::+ooo%%ooo%o%%%%%oo%%oooooo+++++::::::::::::++::::++oo%oo%%%#####@@@@@@@@@@@@@@@%oooooooo%%%oo+:::::::::::::::::!
   !:::::::::+ooo%%%ooo%%%%#%o%%%ooo++++++++::::::::::::++::::++oo%ooooo%####@@@@@@@@@@@@@@@#ooooooooooo%%%o+:::::::::::::::!
   !::::::::+oooo%%%%%%%%###%%%%ooo++++++++++:::::::::::::::::++oo%oooooo#@@@@@@@@@@@@@@@@@@@oooooooooooooo%%o+:::::::::::::!
   !:::::::+o%%%%%oo%%%%####%%%%oo+++++++++++:::::::::::::::::+++ooooooo%@@@@@@@@@@@@@@@@@@@@%ooooooooooooooo%o+::::::::::::!
   !:::::::+o%%%%o%%%########%%ooo++++++++++++::::::::::::::::+++ooooooo#@@@@@@@@@@@@@@@@@@@@#ooooooooooooooooo%+:::::::::::!
   !:::::::+o%%%%%#######@@@##ooo++++++++++++++:::::::::::::::+++oooooo%@@@@@@@@@@@@@@@@@@@@@@%ooooooooooooooooo%+::::::::::!
   !::::::::+o%%%####@@@@@@@@##oo++++++++++++++::+++::::::::::+++oo%%o#@@@@@@@@@@@@@@@@@@@@@@@#oooooooooooooooooo%+:::::::::!
   !::::::::::o%%%##@@@@@@@@@@@#oo+++++++++++++++++++::::::::+++ooo%##@@@@@@@@@@@@@@@@@@@@@@@@@oooooooooooooooooooo:::::::::!
   !:::::::::::o%#@@@@@@@@@@@@@@@%oo++++++++++++++++++::::::++++oo%#@@@@@@@@@@@@@@@@@@@@@@@@@@@%oooooooooooooooooo%+::::::::!
   !:::::::::+%@@@@@@@@@@@@@@@@@@@@#%oooooooo+++++++++++::+++++o#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#o+o+oooooooooooooo%o::::::::!
   !::::::::#@@@@@@@@@@@@@@@@@@@@@@@@@##%%oooooooo++o+++++++o%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%o+++++++ooooooooooo::::::::!
   !::::++o%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##%%oooooooooooo%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#ooo++++++++ooooooo%+:::::::!
   !:+oooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#######@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ooo+++++++oooooooo%+:::::::!
   !ooooooooo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%oo+++++++ooooooo%%+:::::::!
   !ooooooooo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#ooo++++++ooooooo%%o:::::::!
   !ooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%oooo+++++ooooo%%%o:::::::!
   !ooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#ooooo++++ooooo%%%%:::::::!
   !ooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%ooooooooooooo%%%%+::::::!
   !oooooooooo@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@#ooooooooooooo%%%%+::::::!
   !oooooooooo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##@@@@#o####@@@@@@@@@@@@@@@@@@@@@@@@%ooooooooooo%%%%%+::::::!
   !oooo++++oo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#####o%%o.+##.:%@@@@@@@@@@@@@@@@@@@@@@@#ooooooooooo%%%%%+::::::!
   !++++++++++#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###@@@@@@@#+:#@o.+..###...+%%@@@@@@@@@@@@@@@@@@@@@%oooooooooo%%%%%+::::::!
   !++++++++++#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%:+###@@@@#.+@@%o..:##@+....:%#@#@@@@@@@@@@@@@@@@@#oooooooooo%%%%%o::::::!
   !++++++++++#@@@@@@@@@@@@@@@@@@@@@@@@@@@@###@@@@#:  +##@@@#%.%#@@#...#@#%+.....:o%%o#@@@@@@@@@@@@@@@%ooooooooo%%%%%o::::::!
   !++++++++++%@@@@@@@@@@@@@@@@@@@@@@@@@@#%.o#@@@#:.   o#@@@##+##@@#...#@####+.....::o@@@@@@@@@@@@@@@@#%oooooooo%%%%%o::::::!
   !++++++++++%@@@@@@@@@@@@@@@@@@@##@@@@@%. .%###:o#.  .##@@#####@@#:. %#@@@%%.......+#@@@@@@@@@@@@@@@@#oooooooo%%%%%o::::::!
   !++++++++++%@@@@@@@@@@@@@@@@%+:+%@@@@#:.  .%%:o@#o   o%###o%##@@#+. o#@@#+..o#o:..:#@@@@@@@@@@@@@@@@@%ooooooo%%%%%o::::::!
   !++++++++++%@@@@@@@@@@@@@@@#:.. .%###:oo   ::o####:  :###o..:%###o  +#@@#o..+###:..#@@@@@@@@@@@@@@@@@#oo%%oooo%%%%o::::::!
   !++++++++++%@@@@@@@@@@@@@@#o.:.  .#%:o##+   +###%#%  .##%..  o###%. .####%...###+. o#@@@@@@@@@@@@@@@@@%o%%%ooo%%%%o+:::::!
   !++++++++++%@@@@@@@@@@@@@@#:o#o   ::o####.  :######.  %##+  .####%. .%####...###o..+%@@@@@@@@@@@@@@@@@#o%%%%%o%%%%%+:::::!
   !++++++++++%@@@@@@@@@@@@@@@:###:   o##%##+  .####%:.  o%##.  %%###:  o####:. o##%...##@@@@@@@@@@@@@@@@@%o%%%%oo%%%%+:::::!
   !++++++++++%@@@@@@@@@@@@@@#%###%.  o##%##% . :::.:o:  o###.  o####+  +####o..+###...##@@@@@@@@@@@@@@@@@#o%%%%oo%%%o::::::!
   !+++++++++o%@@@@@@@@@@@@@@#%%###:  :####%:.  +o%###+  %###:  +####+  :####%...###+..o###@@@@@@@@@@@@@@@@%%%%%oo%%%o::::::!
   !+++++++++o%@@@@@@@@@@@@@#######+  .o%o+.%:  o#####: .####o  :####%. .#####...%##o..+###@@@@@@@@@@@@@@@@#%%%ooo%%%o::::::!
   !+++++++++o%@@@@@@@@@@@@#######%o   :::o##:  o##%##. :####%  .%####.. o####:..+%#%...####@@@@@@@@@@@@@@@#%%%oooo%%o::::::!
   !++++++++++%@@@@@@@@@@@@########%.  %##%##: .%o+:+%. o%####.  %####+  +###%+.....:.. :####@@@@@@@@@@@@@@#%%ooooo%%o::::::!
   !++++++++++%@@@@@@@@@@@@######+:+.  %#####. ..:oo+. .#%####.  o####+  .%%%#:......:%+o#####@@@@@@@@@#@@@#%oooooo%%o::::::!
   !++++++++++%@@@@@@@@@@@@####%:     .%%+:++. :%####: o######:  +####+ ....+####%o:.%######@@@@@@@@@@@@@@@#ooooooo%%o::::::!
   !++++++++++o#@@@@@@@@@@@#####:oo.  .::o%o: .%####%.:#######o  .%+##o:...:#o#######%#######@#@@@@@@#@@#@#%oooooooo%+::::::!
   !++++++++++o#@@@@@@@@@@@######%#%. .o####o :##%%#+.%%#######.  .%###%%o:###################@@@@@####@@##ooooooooo%+::::::!
   !++++++++++o#@@@@@@@@@@@@#####%##. +#####: %##%%o.o#%#######+  +#######%%##################@@@@@@@######ooooooooo%+::::::!
   !++++++++++o#@@@@@@@@@@@@#######%: %##%#% :#%:.  +###########o+#############o##o%#########@@@@@#@######%ooooooooo%+::::::!
   !++++++++++%#@@@@@@@@@@@#########..###%o:.%:. . .###########%########%####o.+##:.+%########@@##########ooooooooooo+::::::!
   !++++oooo+o#@@@@@@@@#@@@#########.+#o:.  :. ....o################%#%##o:oo..###o....+%#################ooooooooooo+::::::!
   !++++oooo+o#@@@@@#@#############%.%:     .:o##o+##################:.###o...:####:.....:o%##############ooooooooooo+::::::!
   !++++ooooo%#@###@##############%+...::: .oo###%###################.+###%o...###%%%o:....:o:%###########oooo+ooooo%+::::::!
   !++++ooooo%@@####@##############..o%###o%###########o+###########%.%%####...%######+.::....%###########oooooooooo%+::::::!
   !+++++oooo%####################%+#%%###%##########%:.%############%#%###%...+%####o..o#o:..+##########ooooooooooo%+::::::!
   !+++++oo%%####################%######%%%##%%%#%o::: +####################o..:#####o..:###+..##########ooooooooooo%+::::::!
   !+++++ooo%###########################+.......o##%.  +%#########%#::o%####%...%#####...%#%%..o##########ooooooooooo+::::::!
   !++++++oo%##########################%.      :####+..:####+%#####:...+####%.  +#####+..o###:.:##########oooooooooo%+::::::!
   !++++++ooo%####################%+o#o..:..  .%###%%...###o..+###%:...%#####+  :%####o..:###o..%#########%ooooooooo%o::::::!
   !++++++ooo%####################+:%o.o.o%%%%o######...%#%....o%##%.  o%####o  .#####%...%##%..o#########%ooooooooo%o::::::!
   !+++++++oo%###################o.%+.+#.%####%######:  +o:+.  :####.  +#####%. .%####%+ .o#%#:.:#########oooooooooo%o::::::!
   !+++++++oo%%#################o.%o. :o.%###########+  ::o#o  .%###+  :#####+:..+%####o .:###+..%#######%oooooooooo%o+:::::!
   !+++++++ooo%###############%%.+#:  +#.%##########%o   o%#%   %##oo..:#o####+  .%####%. .+o%%..o########oooooooooo%o+:::::!
   !+++++++ooo%################+.%%:  +#.%%#########%%  .%###.  o%#%%...%o####o   %#%##%.    .:..o########oooooooooo%o+:::::!
   !++++++++oo%###############%.:#%+  +#:%%######%###%.  %##%+..+%###.. o##%#%%.  :o%%#o..  ...+%#########%ooooooooo%%+:::::!
   !++++++++oo%###############o +##+  +%:%############.  o###o..:####:  +#%%##%.   ..%###%%o:.:###########%oooooooooo%+:::::!
   !++++++++oo%###############:.o##+  :%:o##########%#.  o###o  .%##o:  :#o###+.   .o#%####%#%%%##########%ooooooooooo+:::::!
   !++++++++oo%##############%..o##+  :#+o############:..+%%%o   %%#o+   ::#####%+.+######################%ooooooooooo++::::!
   !++++++++oo%##############%..o##o  +#o+%%##########+..+###%.  %+%##.  .%#####%#%%#######################oooooooooooo::::+!
   !++++++++ooo%#############%. :##o .o#o:%########%%#+  :####.  %####o. o%o#######%#######################%ooooooooooo::::+!
   !++++++++ooo%#############%. .%%+ +##%:#####%%%:%##o  .%###.  %#####o+###################################ooooooooooo+:::+!
   !++++++++ooo%##############:  :%+:###%.%%###%o.:#oo+   :%%#. .#####o%####################################ooooooooooo+:::+!
   !++++++++ooo%##############o   :.%##%%.o+%#%+ .%#%%.   oo%%. o###########################################ooooooooooo+::++!
   !++++++++ooo%#############oo:   :%####.oo%o. .o%###%: +#o%+ :%%#########################################%ooooooooooo+::+:!
   !++++++++oo%%###############%.   .:o%%.++.  .%+o#####o%#%o :##%#########################################%oooooooooo%+::++!
   !++++++++oo%%################o.            :%#%######%+%o.+%############################################%oooooooooo%++:++!
   !++++++++ooo%#################o.          +%#########%%+.o%#############################################%oooooooooo%+++++!
   !++++++++ooo%##################%+.     .:%o%#%########+.o#%%#############################################ooooooooooo+++++!
   !++++++++ooo%#################%%##%o+oo%#%%%#%#######o%%#################################################%ooooooooooo++++!
   !++++++++ooo%#######################%%###############o%###################################################%oooooooooo++++!
   !++++++++ooo%##############################################################################################oooooooooo++++!
   !++++++++ooo%##############################################################################################ooooooooo%++++!
   !+++++++++oo%#############################################################################################%ooooooooo%++++!
   !+++++++++oo%#############################################################################################oooooooooooo+::!
   !+++++++++oo%#############################################################################################oooooooooo%o+::!
   !+++++++++oo%###########################################################%%################################oooooooooo%%+::!
   !+++++++++oo%###########################################%##########%%%%%%#################################ooooooooooo%o::!
   !+++++++++oo%###########################################%#######%%%%%%%%%##################################ooooooooo%%%o+!
   !+++++++++oo%###################################%%%%%%%%%%%%%%%%%%%%%%%%####################################ooooooo%%%%oo!
   !+++++++++oo%##################################%%%ooooooo++o%%%%%%%%%%%%%%%%%%%%############################%ooooo%o%oooo!
   !+++++++++oo%o#################################%%o+:+oo+..:ooooooooooooo%%%%%%%%%###########################%oooooooooooo!
   !+++++++++ooo:o###############################%%%:::o+:..+ooooo+oo+++++++++%%%%%%%%oo%%%%###################ooooooooooooo!
   !+++++++++ooo:+#############################%%%%o..:...:oooooooo%o:++++++++%%%%%%%oo:.::o%%%%%%%###########%ooooooooooooo!
   !+++++++++ooo::###########################%%%%%%+.....:oooooooo%oo:oo+++++o%%%%%%oooo+:.:+%%%%%%%%%%%%%%###%ooooooooooooo!
   !+++++++++ooo::o#########################%%%%%%%+...::+ooo+ooooooo+ooo+++:+%%%oooooo++:::.:+%%%%%%%%%%%%####%%%%%%ooooooo!
   !+++++++++oo%::+#######################%%%%%%%%%+:...+oooo++++++oo+ooo+++::ooooo%ooo:..::+:.:+%%%%%%%%%%%######%%#%%%%%#%!
   !+++++++++oo%:::#####################%%%%%%%%%%oo+...ooooooo+++++++oo+++++:++oooo++o++:::++o+::o%%%%%%%%%######%%#%%ooo##!
   !++++++++ooo%:::%###################%%%%%%%%%%%oo::::ooooo+++++++++++o+++++++o++++++:++::++ooo+++o%%%%%%%#######%#%%%%%##!
   !++++++++ooo%:::o###################%%%%%%%%%%%o+::::+oooo+++++++++++++++++++++++:::::++++ooooo%oooooooo%%#####%%%%%%%%##!
   !++++++++ooo%:::+#################%%%%%%%%%%%%%o+::::++oooooooooo++oo++++++++++++:::::+++ooooooooo+ooooooo%%###%%%%%%%%%%!
   !++++++++oooo::::################%%%%%%%%%%%%%%o+:::++oooooooooooo+oo+++++++:oooo+++::+++ooooooooooooooooooo%%o%oo%oo%o%%!
   !++++++++oooo:.::%###############%%%%%%%%%%%%%%o::++++ooo+oo+oooo+ooo+++++++++ooo:......:::ooooooooooooooooo%%%%oo%%%%o%o!
   !++++++++ooo+::::o#############%%%%%%%%%%%%%%%oo++++:+oo+++:+++oo++oo+++++::::+++:..:::..:+oooo%%oooooo%oooo%%%oo%%oooooo!
   !+++++++ooo%+::::+#############%%%%%%%%%%%%%%ooo++++:+++:+++:++oo++oo++++++:++:++++++::::+oo++o%oooooooo%%ooo%%%%%%%%ooo%!
   !+++++++ooo%+:::::%###########%%%%%%%%%%%%%%oooo++++:++++++++++o++++o++++++++o:+o++o++:::+o++o+%+++ooo+oo%%%%oo%%%%%%%%%%!
   !+++++++ooo%::::::o##########%%%%%%%%%%%%%%ooooo++++:+++++++++:++++++++++++ooo+:++oo++:.:oooooo%%ooooo+ooo+oooo++oo%%%%%#!
   !++++++oooo%::::::+##########%%%%%%%%%%%%%ooo%oo+++++++++++++++++++++++++++++++:++++:+:.:+ooooo%%ooo+ooo%%%%%%%+oooo%%%%#!
   !++++++oooo%::::.::##########%%%%%%%%%%%%ooo%%oo+:++++++++++++++::+++++++:+:+o++:::+:::.:+oooooooooo+ooo%%%%%%%o%%%ooo%%#!
   !++++++ooooo::::.::%########%%%%%%%%%%%%ooo%%%oo+:+:++++++++++::..:++:::++++o+::.:::::..:+oooooooooooo++o%%%%%%%%%%%oooo%!
   !+++++oooooo:::::.:o########%%%%%%%%%%%%oo%%%%o++:::+++:++++::...::++::+::++::.::.:::::.:+ooooo%%oooooooo%%%%%%%%%%%%%%oo!
   !++++ooooooo:::::.::#########%%%%%%%%%%oo%%%%oo++::::++:::::...:::::+::::::::::o+.:+++:.:+ooooo%%%oooooo%%%%%%%%%%%%%%%%%!
   !++++oooooo+:::::.::%#######%%%%%%%%%%%o%%%%ooo+::.:::::::....:::::::::::::+++ooo::oo+:.:+ooooo%%ooooooo%o%%%%%%%%%%%%o%%!
   !+++oooooo%+:::::..:%######%%%%%%%%%%%oo%%%%ooo::....:::.. ..:::::::::.:.:+++ooooo++o+:.:+ooooo%%%oooooo%%%%%%%%%%%%%oo%o!
   !++ooooooo%+:::::..:+#####%%%%%%%%%%%oo%%%%ooo+:....::..  .:::::::::::::.:+++oooooo:o+..:+ooooo%%%oooooo%%o%%%%%%%%%ooo%%!
   !++ooooooo%+:::::...:%####%%%%%%%%%%%oo%%%%ooo+.  ....  ..:::..:..::::...:++++ooooo+:+:.:+ooooo%%%oooooo%%%%%%%oo%%%oooo%!
   !+oooooooo%+::......:o#####%%%%%%%%%%o%%%%%ooo+   .   ..::........::.....:+++++oo+++:::.:+ooooo%%%oooooo%%%o%%%%oo%%o++o%!
   !+oooooooo%:::.::....:%####%%%%%%%%%%o%%%%oooo+     ..::.................:+++++++:++:...:+ooooo%%%oooo++o%%%%%%%%%%%oooo%!
   !+oooooooo%:::.::....:o####%%%%%%%%%o%%%%%oooo:    ...:...................:+++::+:++:....+ooooo%%%oooo++o%%%o%%%%%%%%ooo%!
   !oooo%%ooo%:::.:::....:%##%%%%%%%%%%o%%%%%oooo:.    .........  ...........:::::++::+::...+oo+oo%%%oooo++o%o%%%%%%%%%%ooo%!
   !oooo%%%o%%:::::::.....o###%%%%%%%%%o%%%%ooooo:.   ........      .........::++::..::::...+ooooo%%%oooo++o%%%%o%%%%%%%ooo#!
   !oooo%%%o%%:::::::.....+%##%%%%%%%%%o%%%%oooo+:.   .......         .......::::....::::...+ooo+oooooooo++o%%%+o%%%%%%%o+o#!
   !ooooo%%%%%:::::::....:o%##%%%%%%%%oo%%%%oooo+:   .......          .......::...:+:++::...+ooo+ooo++oo+++o%%o+o%%%%%%%o+o%!
   !oooooo%%%%:::::::....:%###%%%%%%%%oo%%%%ooooo:   .......            ........::++::......+oo++ooooooo+++o%%%%%%%%%%%oo+o%!
   !oooooo%%%%::...:::...+###%%%%%%%%%o%%%%%ooooo:  .......              .....::+++:........:oo++ooooooo+++o%%%%%%%%%%%%o+o%!
   !ooooooo%%%+:...:::...:%###%%%%%%%%oo%%%oooooo:.........              .....:+++++:.......:oo+++oooooo++++%%%%%%%%%%%%o+o%!
   !oooooooo%%o::..:......:o%#%%%%%%%%oo%%%%ooooo:.........              .....:+++++++:::...:+++++oooooo+++o%%%%%%%%%%%%o+o%!
   !ooooooooo%%:::.........:+%%%%%%%%%oo%%%ooooo+::.......              .....::++++++++:+:..+:++++oooooo+++o%%%%%%%%%%%%o+o%!
   !oooooooooo%o::...........o%%%%%%%%oo%%%%oooo+::........           .......:::++++:++++:..++:++ooooooo++++%%%%%%%%%%%%oo+%!
   !ooooooooooo%o:::.........+%%%%%%%%%o%%%%oooo+:..........          .......:::+::::++++:..++:++ooooooo++++%%%%%%%%oo%%o++%!
   !oooooooooooo%o::.........+%%%%%%%%%o%%%%oooo+:...........        .......:::::..::++:+:..:++:+ooooooo++++%%%%%%%%oo%%o++%!
   !o+ooooooooooo%o::........:%%%%%%%%%o%%%%oooo+:............       ......:::::...+::::::..:++::ooooooo++++%%%%%%%%%%%%o++o!
   !++++++ooooooooo+::.......:%%%%%%%%%o%%%%oooo+.............   ... .......:::::....:+++:..++++:+oooooo++++%%%%%%%%%%%%o++o!
   !+++++++oooooooo%+:........o%%%%%%%%oo%%%oooo+......::...............:::.::::.....++++:..++++:+oooooo++++%%%%%%%%oo%%oo+o!
   !+++++++++ooooooo%+:.......+%%%%%%%%%o%%%%ooo+.....:::...............:::::::...::.+oo+...++++:::::+oo++++o%o%%%%ooo%%oo+o!
   !+++++++++oooooooo%+.......:%%%%%%%%%oo%%%ooo+.....:::...............:::::....:+++ooo+..:+++++::oo+%o++++ooooo%%ooo%%o++o!
   !++++++++++ooooooo%%:.......o%%%%%%%%oo%%%ooo:.....:::.....     .......:::..:++++oo+++..:+++++++++o%%++++o%%ooo%%oo%%oo+o!
   !+++++++++++ooooooo%o:......:%%%%%%%%%oo%%ooo: . ..........   .............:+++++oo+++..:++oooooo%o%%+o++o%oooooo%%%%oo+o!
   !++++++++++++ooooooo%+:......o%%%%%%%%oo%%%oo. ...........  .........::::....::++oo+++..:+oo+:ooo%oo%oooo%%ooo++o%%%%oo+o!
   !o++++++++++++ooooooo%+......:%%%%%%%%%oo%%oo.  ........ ....::...:.::::::+::....:+::::.:+oo+:+o%%ooooo%%oooooooooo%%oo+o!
   !o+++++++++++++oooooooo:......:o%%%%%%%ooo%oo   ...... ...........::::++::+++++:.....::.:+oooooo%%o%%o%oo%%%oooo+oo%%oo++!
   !o++++++++++++++oooooo%o:......o%%%%%%%%oooo+    ..  .......  ....::::++::+++++::..:....::+ooooo%%o%%%%%%%%%%+oo.+o%%oo++!
   !oo++++++++++++++oooooo%o:....:o%%%%%%%%%ooo+       .:...     ....:+::+++:+++:....++::....::+oooo%%%%%%%%%%%%ooo:+o%%oo+o!

