
   !++++++++++++++++++++++++++++++++++++++++++++:::+++++++++++++++++++++++++++++++++++++:++++++:::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++++++::++++++++++++++++++++++++++++++++++:++:++++++:::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++++++::++++++++++++++++++++++++++++++++++++++++::++:::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++++++++++++++::::++++++++++++++++++++++++++::++++++++:+++++::::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++++++++++++++::::::+++++++++++++++++:++++++++++++::+::::++:::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++++++:::::++++++++++:+++++++:+++++++++++::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++++++:::::+++++++++++++++++++++++++:++::+:::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++++++:::::+++++++++++++++++++++::++:::+:::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++++::::::::+++++++++++++++++++++++:::++:::::::::::::::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++++++++++++++++:::::+++++:::++++:+++++++++::+:+++::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++::+++++++:::::++:++:::+:+:++++:::::+::++++:::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++::::++++++::::::+++:+::::++++++::::::::+++:::::::::::::::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++++++++:++++++++:::::::++:+:::+:+++::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++:::+++++++:::::::++::+:::::+::+::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++:+++:+++:::::::::::+::::++:::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++:+++:++++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++:+:++++++++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++++++++:++++:++:+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++++++:+::++:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++:++++++++++::+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++::++:::::::+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++++++::++::::::+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++++++:+++:++:::::++:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++++++++++:+:::::::+++::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++++:++++::::::::::::+:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!
   !+++++++++++++++++++++++++++:+++++::::::::::::::::::::::::::::::::::::::::::++:::+::::::::+++::::::::::::::::::::::::::::!
   !++++++++++++++++++++++++++++::+++::::::::::::::::::::::::::::::::::::::::::+++++++::++++++++++::::+:::::::::::::::::::::!
   !+++++++++++++++++++++++++++++:++++:::::::::::::::::::::::::::::::::::::++::++++++++++++oo++++++++++:::::::::::::::::::::!
   !++++++++++++++++++++++++++++:+++++:::::::::::::::::::::::::::::::::::++++++++++++++o%####%ooo+++++::+:::::::::::::::::::!
   !++++++++++++++++++++++++++++::++++:::::::::::::::::::::::::::::::::::++++++++oo%%####@@@###%%oo++++:+:::::::::::::::::::!
   !++++++++++++++++++++++++++++:::+::::::::::::::::::::::::::::::::::::+++++oo%#################%oo++++:++:::::::::::::::::!
   !++++++++++++++++++++++++++++:::+::::::::::::::::::::::::::::::::::::+++oo%%###################%%o+++++++::::::::::::::::!
   !++++++++++++++++++++++:++++::::+::::::::::::::::::::::::::::::::::++++oo%###@@@@################%+++++++++::::::::::::::!
   !++++++++++++++++++++++++++++++::::::::::::::::::::::::::::::::++:++++oo##@@@@@@@@@@@@#####@@@####oooo+++++++::::::::::::!
   !++++++++++++++++++++++:::+++++::::::::::::::::::::::::::::::::+::++++o##@@@@@@@@@@@@@####@@@@@####%%oo++++++::::::::::::!
   !++++++++++++++++++++++:::+++++:::::::+::::::::::::::::::::::::+:++++o%##@@@@@@@@@@@@@###@@@@@@@####%%oo++++++:::::::::::!
   !+++++++++++:+:++++++++:::::++:::::::::::::::::::::::::::::::::::+++o%###@@##@@@@@@@@######@@@@#######%oo+++++:::::::::::!
   !++++++++++++::+++++++++:::::::::::::::::::::::::::::::::::::::::+++o##@#@########@@@#######@@@########%o+++++:::::::::::!
   !+++++++++++++:++++++++++++::++:::::::::::::::::::::::::::::::::+++o#@@@@@##############################%o+++++::::::::::!
   !+++++++++++++::++++++++++::::+:::::::::::::::::::::::::::::::::++o%@@@@@@@@#########%##%%%%%%%%%#######%o+++++::::::::::!
   !++++++++++++::++:+++++:+::::+++:::::::::::::::::::::::::::::::+++%#@@@@@@@@######%%%%%%%%ooo%%%%%%#######%+++:::::::::::!
   !++++++++++++:::+::+++++:+:::::++:::::::::::::::::::::::::::::+++o#@@@@@@@@@@###%%%oooooooooooo%%%%%#######%o+:::::::::::!
   !++++++++++++::++:+++++:::::::::+::::::::::::::::::::::::::::+++o#@@@@@@@@@@##%%ooooooooooooooooo%%%%#######%o+::::::::::!
   !++++++++++++++::+::++++++:::::::::::::::::::::::::::::::::::++o#@@@@@@@##%%%ooooooooooooooooooooo%%%%######%oo+:::::::::!
   !+++++++++++++:::+:++++++:::::::::::::::::::::::::::::::::::++o#@@@@@@##%%oooooooooo++++oooooooooooo%%#######%++:::::::::!
   !++++++++++++++:++:+:+++:::::::::::::::::::::::::::::::::::++%##@@@@@##%oooooooooo++++++o++++ooooooo%%%#######o+:::::::::!
   !+:+++++++++++++:::::+++::++:::::::::::::::::::::::::::::::+o%#@@@@@##%ooooooooooo++++++++++ooooooooo%%%######%+:::::::::!
   !++++++++++++++++:::+++++:::::::::::::::::::::::::::::::::++%##@@@@@#%%ooooooooooo++++++++++ooooooooo%%%%#####%+:::::::::!
   !:++++++++++++++::::++++:::+:::::::::::::::::::::::::::::++o%#@@@@@##%ooooooooooo++++o+++++oooooooooo%%%%#####%++::::::::!
   !+++++++++++++::::::::++:::+::::::::::::::::::::::::::::+++o#@@@@@@#%%ooooooooo++++++ooo+++oooooooooo%%%%##@@#%o+::::::::!
   !+++:++++++++:::::::::::::::::::::::::::::::::::::::::::+++%#@@@@@@#%%ooooooo++++++++++++++++oooooooo%%%%##@@#%o+::::::::!
   !++++++++++++::::::::++++:::::::::::::::::::::::::::::::+++%#@@@@@@#%%ooooooo+++++++++++++++++o++oooo%%%%##@@#%o+::::::::!
   !:::+++++++++:::::::::++::::::::::::::::::::::::::::::::+++%#@@@@@@#%%ooooooo++++++++++++++++++++oooo%%%%#@@@#%o+::::::::!
   !::::+++++++++:::::::::::::::::::::::::::::::::::::::::::+o%#@@@@@##%%ooooooooooooo+++++++++++ooooooo%%%%#@@@#%+:::::::::!
   !:::::::+++++::::::::::::+:::::::::::::::::::::::::::::::+o%#@@@@@#%%%%%%##%@@@@@##%o+++++++ooooo%%%%%%%%#@@#%o+:::::::::!
   !:::::::++++::::::::::+::::::::::::::::::::::::::::::::::+o#@@@@@#%%%%%#@@@@@@@@@@@@#%++o+ooo%%########%%##@#%++:::::::::!
   !:::::::+++++::::::::::::::::::::::::::::::::::::::::::::+%#@@@@@#%%%%#@@@@@@@@@@@@@@#++o+%%%#@@@@@@@@@####@%o+::::::::::!
   !::::::::+:+::::::::::::::::::::::::::::::::::::::::::::+o%##@@@##%##%@@@@@@@@@@@@@@@@%o+ooo%@@@@@@@@@@@@##@%++::::::::::!
   !::::::::++::::::::::::::::::::::::::::::::::::::::::::++oo##@@@#####@@@@@@@@@@@@@@@@@%o+oo%#@@@@@@@@@@@@@@@%++::::::::::!
   !:::::::::+::::::::::::::::::::::::::::::::::::::::::::+++o##@@@##%%##@@@@@@@##@@@@@@@#o+oo%@@@@@@@@@@@@@@@@o+:::::::::::!
   !:::::::::::+:::::::::::::::::::::::::::::::::::::::::+++oo%##@###%%%#@@@@@@###@@@@@@@%ooo%##@@@@@@@@@@@@@@@%+:::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::::+++oo%#@@##%%%%#@@@@@@%.%#@@@@@#%ooo%##@@@@@@@@@@@@@@@##o::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::::++o%##@@@#%%%%%@@@@@@%:%@@@@@@#oooo%%%#@@@@@@@@@@@@@@#%:::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::::++o%#@@@@#%%%%%%@@@@@##@@@@@#%%oooo%%#+@@@@@@@@@@@@@@#+:::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::::++o%######%%%%ooo%#@@@@@@@@@#%%oooooo%%o#@@@@@@@@@@@@#o+:::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::::+oo%#%%%##%%%ooooo%###%%###%%oooooooo%o%#@@@@@@@@@@@@#o++::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::::+o%##%%###%%%ooooooo%o:.+oooooooooooo%o%%#@@@@@@@@@@##o++::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::++o%#%%%###%%%oooooooooooooooo+ooooooo%ooo%%#@@@@@@#%%#%+:::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::++%##%%%###%%%ooooooooooooo++++ooooooo%oooooo%###%%%%%#%+:::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::++%##%%%%##%%%ooooooooo+++++++ooo%oooooooooooooooooo%%#%::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::++%##%%%%%#%%%ooooo++++++++++oooooo++ooooooooooooooo%%%o+:::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+o%###%%%%%%%%%ooo++++++++++ooooooo++oo%oo+++ooooooo%%o+::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+o%%##%%o%%%%%%ooo++++++++ooooooo%oooo%ooo+++++ooooo%%+:::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+o%%%%%%%%%%%%%ooo+++++++oooooooo%oooo%oooo+++++oooo%%+:::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+o%%%%#%%%%%%%%oooo+++++ooooooooooooo%%ooooo++++oooo%+::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+o%%%%#%%%%%%%%oooo+++oooooo+++oooooooooooooo+++oooo%+::::::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::++o%%%%%%%%%%%%%%ooooooooooooo++++++o+oooooooooooooo%o:::::::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::++o%%%%%##%%%%%%%ooooooooooooooo+++++++oooooooooooo%%o:::::::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::+oo%%%%%###%%%%%%oooooooooooooooo++++++oooooooooooo%%+:::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++oo%%%%%%####%%%%oooo+ooooooooooooo++oooooooooooooo%o::::::::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::+oo%%%%%%####%%%%oooo++ooo%%%%%%ooooooooo%%%%oooooo%+::::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++ooo%%%%%####%%%%oooo++ooo%%%%%%oo%%%%%%%%%%%ooooooo+::::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++oooo%%%#####%%%%ooooo++ooo%%%%%%oooo%%%%##%oooooo%o+::::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::+++oooo%%#####%%%%ooooo++oooo%%%%oooooo%%%%%%oooooo%o++:::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::+++ooooo%#####%o%%%ooooooooooooo%oooooo%%%%oooooooo%o++:::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::+++ooooo%%####%o%%%ooooooooooooooooooooooooooooooo%oo++:::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++++++o%%%####%oo%%%oooooooooo++oooooooooooooooooo%%o+++::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::+++++o%%%%%###%oo%%%ooooooooooo+ooooooooooooooooo%%%%oo+::::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++++oo%%%%%%##%oo%%%oooooooooooooo+++ooooooooo%%%%%%%%%o+:::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++++oo%%%%%%##%ooo%%%oooooooo+oo++++++ooooooo%%%%%##%%%%o+::::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++++oo%%%%%%%#%ooo%%%%%ooooo++++++++++ooooooo%%%%####%%%%o+:::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::++++o%%%%%o%%%ooooo%%%%%%oooo++++++++++ooooo%%%%######%%%o+:::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::++++oo%%%%ooo%%ooooo%%%%%%%ooo+++++++++oooooo%%%%##%%###%%%o:::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::++++oo%%o%ooo%%oooooo%%%%%%%oooooooooooooooo%%%%%%%%%%%##%%o+::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::++oo%oo%o++%%oooooo%%%%%%%%%oooooooooooo%%%%%%%%%%%%%%#%%%+::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+oo%%%o+++%%ooooooo%%%%%%%%%%%%%%%%%%%%%%%%%%oo%ooo%%%#%%+::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+oo%%oo++o%%ooooooo%%%%%%%%%%%%%%%%%%%##%%%%oooooooo%%#%%+::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+oo%oo+++o%%ooooooo%%%%oooo%%%%%%%%%%%#%%%%%oooooooo%%##o+::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::++oooo++o%%%oooooooo%%oooooooo%%%%%%%%%%%%%%+oooooooo%##%+::::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::::+++oo++o%%%%oooooooo%%oooooooooooo%%%%%%%%%%o%%ooo++o%%#%o::::::::::!
   !:::::::::::::::::::::::::::::::::::::::::::::::::::::++oo+o%%%%%oooooooooooooooooooooo%%%%%oo%%#@@@#oo++o%%%%o+:::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::::+++++oo%%%%%%%oooooooooooooooooooooo%%%%ooo%%#@@@@#%++oo%%%o+:::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::::+%###%oo%%%%%%%%oooooooooooooooooooooo%%%%ooo%%%#@@@@@#oooo%%%+:::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::::+%#@@@@#%%%%%%%%%%oooooooooooooooooooooo%%%ooo%%%%#@@@@@@@#oo%%%++::::::::!
   !::::::::::::::::::::::::::::::::::::::::::::o%@@@@@#%%%%%%%%%%%%oooooooooooooooooooooo%%oooo%%%##@@@@@@@@@#%%%o+::::::::!
   !:::::::::::::::::::::::::::::::::::::::::+o#@@@@@@#%%ooo%%%%%%%%ooooooooooooooooooooo%%ooooo%%%##@@@@@@@@@@@##%o+:::::::!
   !:::::::::::::::::::::::::::::::::::::::+%#@@@@@@@@#%ooooo%%oo%%%oooooooooooooooooooooooooooo%%%#@@@@@@@@@@@@@@###+::::::!
   !:::::::::::::::::::::::::::::::::::::o#@@@@@@@@@@@#%oooo%%ooooo%oooooooooooooooooooooooooooo%%%#@@@@@@@@@@@@@@##@%+++++:!
   !::::::::::::::::::::::::::::::::::+%#@@@@@@@@@@@@@@%oooo%oooooooooooooooooooooooooooooooooo%%%%#@@@@@@@@@@@@@@##@oo%%%%%!
   !:::::::::::::::::::::::::::::::::o@@@@@@@@@@@@@@@@@#ooo%ooooooo%oooo+oooooooooooooooooooooo%%%#@@@@@@@@@@@@@@@##@%%%ooo%!
   !::::::::::::::::::::::::::::::::o#@@@@@@@@@@@@@@@@@#oooooooooo%%ooo++oooooooooooooooooooooo%%%#@@@@@@@@@@@@@@@#@@%%ooooo!
   !:::::::::::::::::::::::::::::++o%@@@@@@@@@@@@@@@@@@@%ooooooooo%%ooooooooooooooooooooooooooo%%#@@@@@@@@@@@@@@@@#@@#oooooo!
   !:::::::::::::::::::::::::++o%%%%%@@@@@@@@@@@@@@@@@@@#ooooooooo%oooo+o+ooooooooooooooooooooo%#@@@@@@@@@@@@@@@@##@@#oooooo!
   !:::::::::::::::::::::::+o%%%%ooo%@@@@@@@@@@@@@@@@@@@@%oooooooo%ooo+++oooooooooooooooooooooo#@@@@@@@@@@@@@@@@@#@@@#oooooo!
   !::::::::::::::::::::::o%%%%oooooo@@@@@@@@@@@@@@@@@@@@#oooooooo%ooo++++oooooooooooooooooooo#@@@@@@@@@@@@@@@@@@@@@@#oooooo!
   !::::::::::::::::::::+o%%%oooooooo@@@@@@@@@@@@@@@@@@@@@%oooooo%%ooo++++ooooooooooooo++ooo%#@@@@@@@@@@@@@@@@@@@@@@@#oooooo!
   !:::::::::::::::::::+o%%%oooooooo%@@@@@@@@@@@@@@@@@@@@@@%ooooo%%ooo+++++ooooooooooo++ooo#@@@@@@@@@@@@@@@@@@@@@@@@@#o++++o!
   !::::::::::::::::::+o%%%ooooooooo%@@@@@@@@@@@@@@@@@@@@@@#%oooo%%ooo+++++++oooooooo+++o%#@@@@@@@@@@@@@@@@@@@@@@@@@@#o+++++!
   !::::::::::::::::::+%%%ooooooooooo@@@@@@@@@@@@@@@@@@@@@@@@#%%%%%ooo+oo++++++++++++ooo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@#o+++++!
   !:::::::::::::::::+%%%oooooooooooo@@@@@@@@@@@@@@@@@@@@@@@@@#%%%%ooooooo++++++++++oo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#++++++!
   !:::::::::::::::::o%%ooooooooooooo@@@@@@@@@@@@@@@@@@@@@@@@@@@#%%ooooooooooo+++++%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#++++++!
   !::::::::::::::::+%%%ooooooooooooo@@@@@@@@@@@@@@@@@@@@@@@@@@@@@##%oooooooooooo%#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#o+++++!
   !::::::::::::::::o%%%ooooooo+++++o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####%%%%##@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#o+++++!
   !::::::::::::::::o%%%ooooooo+++++o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#o++++o!
   !:::::::::::::::+%%%%oooooo++++++%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o+++oo!
   !:::::::::::::::+%%%%oooooo++++++%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o++ooo!
   !:::::::::::::::+%%%oooooooo+++++%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%o++oo!
   !:::::::::::::::o%%%oooooooo++++o#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%oo++o!
   !:::::::::::::::o%%%oooooooo++++o#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#ooo++!
   !:::::::::::::::%%%%ooooooooo+++o#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#ooooo!
   !::::::::::::::+%%%%ooooooooooo+o@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ooooo!
   !::::::::::::::+%%%%ooooooooooooo@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%oooo!
   !::::::::::::::o%%%%oooooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%oooo!
   !::::::::::::::o%%%%oooooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#oooo!
   !:::::::::::::+%%%%%oooooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#oooo!
   !:::::::::::::+%%%%%oooooooooooo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%ooo!
   !:::::::::::::+%%%%%oooooooooooo#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%ooo!
   !:::::::+:::::+%%%%ooooooooooooo@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@#@@@@@#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#%oo!
   !::::::++:::::o%%%%oooooooooooo%@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@#@@@@@@@@%@@@#@@%#o:o@o+%@@@@@@@@@@@@@@@@@@@@@@@@@#%%%!
   !:::+:::::::::o#%%%oooooooooooo%@@@@@@@@@@@@@@@###%#@@@@+o@oo@@@@@@#+%#@@@@@@%:%@++%o.+@@o..+#@@@@@@@@@@@@@@@@@@@@@@@@%%%!
   !:::+++++::::+o#%%%oooooooooooo#@@@@@@@@@@@@@@@%:.:#@@@@oo+ +@@@@@%..:%@@@@@@:.#@#:...o#@o.  :o#@@@@@@@@@@@@@@@@@@@@@@#%%!
   !:::+++++::::+o#%%%oooooooooooo#@@@@@@@@@@@@@@#:...:#@@@%:  .#@@@o....o@@@@##:+@@@%. .#@@%.. ..+#@@@@@@@@@@@@@@@@@@@@@#%%!
   !:::+++++::::+o#%%%oooooooooooo#@@@@@@@@@@@@@#o+:...o#@o.+   +#@++#....#@@@@#:%@@@#...#@@%%:.. ..+o#o#@@@@@@@@@@@@@@@@@%%!
   !:::+++++++::+o#%%%%ooooooooooo#@@@@@@@@@@@@@@+#%...:#+:##.  .%:o@@+...o@@@@@#@@@@%...%@@@@#+......:+@@@@@@@@@@@@@@@@@@%o!
   !::+++++++++:+o#%%%%oooooooooo%@@@@@@@@@@@@@@#o@#:...:+#@@o...:%@@@%.  +@@@@%#@@@@#...o#@@@#%.......+@@@@@@@@@@@@@@@@@@oo!
   !:++++++++++:+o#%%%%oooooooooo%#@@@@@@@@@@@@@@@@@o...o@#@@#...o@#@@@:. :##%+.:%@@@@:..o@@@@+..o#+...:#@@@@@@@@@@@@@@@@#oo!
   !:++++++++++:+o#%%%%ooooooooooo#@@@@@@@@@@@@@@@@@%...%@#@@#:..+@@@@@:. :#@o...:#@@@:..o@@@%:..o@@%...#@@@@@@@@@@@@@@@@%oo!
   !:++++++++++:+o#%%%%ooooooooooo%@@@@@@@@@@@@@@@@@%...%@@@@@:..+#@@@%:..:#@+...+@@@#:..+@@@@+. +###...#@@@@@@@@@@@@@@@#ooo!
   !:++++++++++++o#%%%%ooooooooooo%#@@@@@@@@@@@@@@@%%...o#@@#o....:+::::..:#@#...o#@@@+..+#@@@o  :@@#...%@@@@@@@@@@@@@@@#ooo!
   !:++++++++++:+o#%%%%oooooooooooo%@@@@@@@@@@@@@@@##...:::::%:..o%%%#@+  +@@@:..o#@@@o..:#@@@o  :#@#...%@@@@@@@@@@@@@@@#ooo!
   !+++++++++++++o#%%%%oooooooooooo%@@@@@@@@@@@@%#%%%...##%#@#...%@##@@: .%@@#:..+@@@@o. :#@@@%  .#@@:..%@@@@@@@@@@@@@@@%ooo!
   !:++++++++++++o#%%%%%ooooooooooo%#@@@@@@@@@@@%:..:..:#@%@@%...#@##@#. .#@@#+..+@@@#%  .#@@#%. .##@:..%@@@@@@@@@@@@@@#%ooo!
   !+++++++++++++o#%%%%%ooooooooooo%#@@@@@@@@@@@+++....o##%##o..+%o+o#%..o@@@@+  :%@@#%  .%@@@#. .#%#+..o#@@@@@@@@@@@@@#%ooo!
   !++:++++++++++o#%%%%%ooooooooooo%#@@@@@@@@@@@##@o...+:::::.. .:++:....o@@@@o  :#@@@#. .+@@@@...%@@o..:#@@@@@@@@@@@@@#%ooo!
   !++:++++++++++%#%%%%%ooooooooooo%#@@@@@@@@@@@@@@#...o#@@#+. +#@@@@%..%#@@@@o  .#@@@#.  %@@@#:..:%#%..:#@@@@@@@@@@@@@#%ooo!
   !+++++++++++++%#%%%%%oooooooooo%%#@@@@@@@@@@@@@#%..%@#@@@+ .#@#@@@+.o@@@@@#%  .##@##:..o##@#:.....:.::%@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%%oooooooooo%%#@@@@@@@@@@@@@@o.+@@#@@%..%@@%@@o.+#@@@@@#%. .%#@##....:+##:......o@%#@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%%oooooooooo%%#@@@@@@@@@@@@@@:.#@@###:.o@#%o%o.+%#@@@@@@#...o+#@%.....+#@@@#%o++#@@@@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%oooooooooo%%%#@@@@@@@@@@@@#%.%#%+:...o%+.....o@@@@@@@@@@:. .o@@@%+..:#%@@@@@@@##@@@@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%oooooooooo%%%#@@@@@@@@@@@#+:+o:.....:...... +@@@@@@@@@@@o. +#@@@#@#+#@@@@@@@@@@@@@@@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%oooooooooo%%%#@@@@@@@@@@@@#..........:+o+..:%@@@@@@@@@@@#o+##@@@@@@#@@@@#@@@@@@@@@@@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%oooooooooo%%%#@@@@@@@@@@@@o.o%#@#%.:%%@@@#+##@@@@@@@@@@@@@@@@@@@@@@@@@@%:#@oo#@@@@@@@@@@@@@@@@@@%%ooo!
   !+++++++++++++%#%%%%oooooooooo%%#@@@@@@@@@@@@#%#@@@@@%#@@@@@@#@@@@@@@@@@@@@@@@@@@#%o##%o%%+.o@@+..+%#@@@@@@@@@@@@@@@%oooo!
   !+++++++++++++%#%%%%oooooooooo%%#@@@@@@@@@@@@@@@@@@@#@@@@##@@@@@@@@#o%#@@@@@@@@@@#.+@@#o...:#@@%....+o#@@@@@@@@@@@@@%oooo!
   !+++++++++++++##%%%%%ooooooooo%%#@@@@@@@@@@@@@@@@@@#%oo%#.%@@@#%%%+.+@@@@@@@@@@#%%.%@#%@:..+#@@#.    .:%%###@@@@@@@@%oooo!
   !++++++++++++o##%%%%%ooooooooo%%#@@@@@@@@@@@@@@#@@@@+  ...::o%#+....#@@@@@@@@@@##o+%#@@@+  +@@#o%:.......o:#@@@@@@@@%oooo!
   !++++++++++++o##%%%%oooooooooo%%#@@@@@@@@@@@@@@%o@@+..     .%@@@+...%@@@@@@@@@@@@#@@@@@@o..:@@##@@%+......:@@@@@@@@@%oooo!
   !++++++++++++o##%%%%oooooooooo%%#@@@@@@@@@@@@@%:%#:::+.....%@@@@%...#@@@%#@@@@@@%+%#@@@#o..:#@@@@@%o.:....:#@@@@@@@@%oooo!
   !++++++++++++o##%%%%ooooooooo%%%#@@@@@@@@@@@@%:%#::#:o#%o+o@@@@@#:..%@@@+:%@@@#o...o@@@@o...%@@@@#:.:##o..+@@@@@@@@@%oooo!
   !++++++++++++o##%%%%%oooooooo%%%#@@@@@@@@@@@#:+@+.:%+%@@@##@@@@@@+..+@@o...%#@#....:@@@@o  .#@@@%%..:#@@:.+@@@@@@@@#%oooo!
   !++++++++++++o##%%%%ooooooooo%%%#@@@@@@@@@@@%.%@+..#oo@@@@@@@@@@@o..:%o....+#@@o...%@@@#o  .#@@@@o..+###:.+@@@@@@@@#%oooo!
   !++++++++++++o%#%%%%ooooooooo%%###@@@@@@@@@@o.%@o..%%+@@@@@@@@@@@%...+o#+..:#@@#...%@@@#%..:#@@@@o..+@@#..o@@@@@@@@#%oooo!
   !++++++++++++o%%%%%%%oooooooo%%####@@@@@@@@@o.%@%..+#:%@@@@@@@@@@%...+#@%...#@@#...%@@@@%..:#@@@@+..o@@%..%@@@@@@@@#%oooo!
   !++++++++++++o%#%%%%oooooooo%%%#%%#@@@@@@@@@o.o@#:.:#+%@@@@@@@@@@@:..o@#%:..%@@#:..#@@@@%..:#@@@#+..%@@o.:#@@@@@@@@#%oooo!
   !++++++++++++o%%%%%%oooooooo%%%#%+%#@@@@@@@@#:+@@+..%%o@@@@@@@@@@@+..o@@@+::o@@@+::%@@@#%..:#@@@#:..%#@o.:#@@@@@@@@#%oooo!
   !++++++++++++o%%%%%%oooooooo%%%#o+o#@@@@@@@@@+:%@%..o#+#@@@@@@@@@@o::+@@@o::o@@@o::o@@@@#:.:%@@@#:.:#@@+.:@@@@@@@@@%%oooo!
   !++++++++++++o%%%%%%oooooooo%%%#+++#@@@@@@@@@%::##::%@oo@@@@@@@@@@#:::#@@%:.+@@@o..+@@@@#..:#@@@%::::+o::%@@@@@@@@@%%%%%%!
   !++++++++++++o%%%%%%oooooooo%%%#+++#@@@@@@####o+o+:o#@#o##@@@@#%%##:::#@@%..:%@@%..:o#@#o:::o%##++:::::o#@@@@@@@@@#%#####!
   !++++++++++++o%%%%%%oooooooo%%%%++o@@@@@@#%o%#%+::%######%%%%%o%%%####@@#%+::+o%#%o%%#@##%ooo%#@@@@#%%#@@@@@@@@@@@#######!
   !++++++++++++o%%%%%%oooooooo%%%%++%@@@@@#o+o%o::o########%o%oo%o%%#@@@@@###%+::+o#####@#######@@@@@@##@#########@########!
   !++++++++++++o%%%%%%ooooooo%%%%o++#@@@@@#::+::+#@@####@@#%%#%o%oo%#@@###%##%+:++::o%##@#######@@@@@@#####%%%#############!
   !++++++++++++o%%%%%%ooooooo%%%#o++#@@@@@%:::++o#@########%%##%%%oo###%####%+::+ooo+:+%########@@@@@@@####%%%#############!
   !++++++++++++o%#%%%%ooooooo%%%#o++#@@@@@%::::%##@#%%%%%%#%%#%%%%%o%%%#%#%%%oo++oo%%%ooo%#######@@@@@@####################!
   !++++++++++++o%#%%%%oooooo%%%%#+++%@@@@@#%+::%##@###%%%%%%%#%%%%%o%%%%%%oo++oooo%%%%%##%%%%%%%%##@@@@####%%%###%#########!
   !++++++++++++o%#%%%%ooooo%%%%%#+++%@@@@@#%+++%##@###%%%%%%%#%%%%%%%%%o%%+++++ooo%%%%%%%%%%%%%%%%%%##%#%%#%%%%%%%%%%######!
   !++++++++++++o%#%%%oooooo%%%%%#+++o@@@@@#oooo##@@@#######%%##%%%%%%o%%%%ooo++ooo%%%%%%%%%%%%%%%%%####%%##%%%%%%%%%%######!
   !++++++++++++o##%%%ooooo%%%%%#%++++#@@@@#oooo%#@@@@@@########%%%%%%%o###%o+::+:++o%#%####%%%%%%%%%###%%##%%%%#%%%%%######!
   !++++++++++++o##%%%ooooo%%%%%#%++++%@@@@#oo%%#@@@@@@@##@#####o%%%o%%o%#%+:::++:++%%%%######%%#####%#########%%%%#########!
   !++++++++++++o##%%%oooo%%%%%%#o++++%@@@@#%%%%%#@@##%%###@####%oo%oooooo%oooooo++o%%o%o#%%%%%o%%%%%#%%%%########%#########!
   !++++++++++++%#%%%%ooo%%%%%%%#o++++%@@@@##%%o%#@#%%%%%##@#####%%%%oo%%o##%%%oo++o##%%%##%%%%%%%%%%%%%oo%o%###############!
   !++++++++++++%#%%%%oooo%%%%%%#o++++%@@@@##%%%o###%#%%#########%%%%%###oo%%###o++o##%####%%%o%%%#@@@@#%###%o%%############!
   !++++++++++++%#%%%oooo%%%%%%%#o++++o@@@@##%%%%########%%######%%%%%%%%oo#%#%oo++o#%#####%%%%%%%#@@@@######%%o%%##########!
   !+++++++++++o%%%%%oooo%%%%%%%#++++++@@@@##%%%%#@###@####@#####%%%%%o%##%oo%o++:+o%%######%##%%%%@@@@######%%%%%o%########!
   !+++++++++++o%%%%%oooo%%%%%%%#++++++#@@@##%%%%#####@@@##%o%###%%%%%###o+++++++++o%#######%##%%%%#@@@@@####%%%%#%%%%######!
   !+++++++++++o%%%%%ooo%%%%%%%%#++++++#@@@##%%%%#####@@#%o++o###o%%%%#%++oo++ooo++o%#######%##%%%###@##@####%%%%%%%%%######!
   !+++++++++++o%%%%%oo%%%%%%%%%#+++++o@@@@#%%%%%#######%+:%#####o%oo%ooo%##:+###+++%#####@#%##%%%####@@@####%%%%##%%#######!
   !+++++++++++o%%%%%%%%%%%%%%%##+++++#@@@@%%%%o%#####%o:+#@#####o%oo%%#@@@@#o%@#+++%#####@@###%%%#@##@##%###%%%%##%%#######!
   !+++++++++++%%%%%%%%%%%%%%%%#%++++#@@@@@#%%oo%###%o::o#@@#####o%oo%#@@@@@@#o##+:+%#####@@###%%%%#@#####%%##ooo%##%#######!
   !+++++++++++%%%%%%%%%%%%%%%%#%+++o@@@@@@%%o++o%%o+::o%#@@#%###%%oo%#@@@@@@@%o%o:+%#####@@###%%%%#@#########%%%###%#######!
   !+++++++++++%#%%%%%%%%%%%%%%#%++++#@@@@@%+::o%o+::o#######%###%ooo%#@@@@@##%+oo++%#####@@#%#%%o%#@@########%%%###%%######!
   !+++++++++++%#%%%%%%%%%%%%%###+++++o@@@@o:::+:::+%########%##%oooo%#@@@#%%o%%:::+o#####@@###%%o%###########%%o%##%%######!
   !+++++++++++%#%%%%%%%%%%%%%###++++++%@@@o..::::o#############oo%oo%#@#%o%#o#o+::+o###%#@@###%%oo%#@########%%o%##%%######!
   !+++++++++++%#%%%%%%%%%%%%####++++++#@@@o...:+o########%#####%o%oo%##%%%#o+ooo+:+o###%##@###%%%o#@#%+###@###%o%###%######!
   !+++++++++++%#%%%%%%%%%%%%####o++++#@@@@o+:.:+%#######%%######o%oo%%###oo++oo++:+o###%###%%%%%%o%#@%o#######%oo###%######!
   !+++++++++++%%%%%%%%%%%%%%####%+++%@@@@@%+:::+%###############o%ooo%#%+++++ooo+::o##%%%#%%%##%oo%####@######%oo###%######!
   !+++++++++++%%%%%%%%%%%%%%####%+++@@@@@@o::::o%######@@@@##%##o%ooo%o+++###o+::::+##%%%###%##%%o%##@@@@#####%oo###%######!
   !+++++++++++%%%%%%%%%%%%%%#####++o@@@@@@o:::+o#######@@@@#%o##o%oooooo%###+:::::++%#%%%###%##%%oo#@@@@@#####%oo%#########!
   !+++++++++++%#%%%%%%%%%%%%%####o+o@@@@@@o:::+o#####@######%o##o%%ooo%#####o+:+++++o%%%%%##%##%%oo#@@@@@@####%%o%#########!
   !+++++++++++%##%%%%%%%%%%%%####o+o@@@@@@%+:++o############%o##o%%ooo%######%%oo+++oo%%%%#####%%oo#@@@@@#####%ooo#########!
   !+++++++++++o##%%%%%%%%%%%%####%++@@@@@@%oo+oo#######%%%##%o##%%%ooo########%o%+++%o%%%######%%oo#@@@@@##%%#%%oo#########!
   !+++++++++++o##%%%%%%%%%%%%#####++@@@@@@##%oo+%##%%%oooo%#%o##%%%oo%%#####%o%%%o++o%o%%%###%#%%oo%#@@@###%###%oo###%#####!
   !+++++++++++o##%%%%%%%%%%%%#####o+#@@@@@##%oo+%#%%%#######%o##%%%oo%%%##oo+o#o%o++o%ooo%##%%#%%oo%#@@@#######%oo%##%#####!
   !++++++++++++%#%%%%%%%%%%%%%####%+#@@@@@##%oo+%#####@@@###%o###%%%%%#o%+++oo%++o++o%%oo%##%%#%%oo%#@@#@@#####%oo%########!
   !++++++++++++%#%%%%%%%%%%%%%#####+%@@@@@##%oo+%###########%%##%%#%%##oo++oo++%oo++o%%%+o###%##%oo%#@##@@#%%##%%o%########!
   !++++++++++++%##%%%%%%%%%%%%%####+%@@@@@##%ooo%########%##%%%#%%%++%oo%o+::+%#%o++o%o%o+%ooo##%oo%######%%###%%o%########!
   !++++++++++++o##%%%%%%%%%%%%%####%%@@@@@##%ooo%######%%%##%o%#%##%o%o#%:::++###%:+o%%%o++o%%##oooo%##########%%oo########!
   !++++++++++++o%#%%%%%%%%%%%%%%#####@@@@@#%oooo%###%%#%%%##%o%#%####%%o::+##%###%::+%%%o%o%o%##%ooo#####@######%oo########!
   !+++++++++++++%##%%%%%%%%%%%%%####@@@@@@#%oooo%##%o%#%%%%ooo%%%%###%o++%#####%#%::+%%%%%%#####%%o%##%##%%#####%oo########!
   !+++++++++++++%##%%%%%%%%%%%%%####@@@@@@%ooooo%##%o%%o+++:++oo++++oo+o%######%%%::+%%#%%%##########%%%####%###%oo%#######!
   !+++++++++++++o###%%%%%%%%%%%%%###@@@@@@%%oooo%#%++++o+:+ooo+oooo++::++o%%###%%%+:+%#%o+o#############%##%%###%oo%#######!
   !+++++++++++++o%##%%%%%%%%%%%%%###@@@@@@%oo++++++++o+::o##ooooo%%%%ooo++::++oooo+:+o####%#@###@#######%##:o###%%o%#######!
   !++++++++++++++%##%%%%%%%%%%%%%###@@@@@@o+::::++oo+::o####o+o%o%##%%%####%o:::::+++o%#####@@##@@#########%######%%#######!
   !++++++++++++++o%##%%%%%%%%%%%%###@@@@@@+.:::++++::+%#%oooo+o%%%##%%%####%+++%++::::+oo%###@##@@#@######@##@#####o%######!
   !++++++++++++++o%##%%%%%%%%%%%%###@@@@@@:...:::::+oo+++::++++##%%##%%##%+::+o%oo+::++o++++o%####@@######@@@@#####%%%#####!
   !+++++++++++++++%##%%%%%%%%%%%%###@@@@@@:.....::oo:::::::o+++%#%o%#%%#o:::+++o+++::+o%###%%%############@@@@#############!
   !+++++++++++++++o###%%%%%%%%%%%%###@@@@#+....:+o%o::::++o%%%+####%#%o%+:::::+%%#o::+o###%+###############@#@#############!
   !+++++++++++++++o%###%%%%%%%%%%%###@@@@#+....:+oo%%o%%#%%#%%%####%%%oooo:::o%oo++::+o####o#@####@@@@@@###################!
   !++++++++++++++++%###%%%%%%%%%%%###@@@@@+....:+oo%%%%##%%#%%###%##%%o%%:::oo+:::+::+o#@@@########@@@@@@##@@##############!
   !++++++++++++++++o%##%%%%%%%%%%%###@@@@@+:...:+o%%%o%%ooo#o%%####%#%oo:::o%%+::++++o#@@@@@###%##@@@@@@@@@@@@@############!
   !+++++++++++++++++o###%%%%%%%%%%%####@@#+:...:+oooo+oooo%#%%%######%o++oo%##%%%oo%%%#@@@@@##oo#@@@@##@@##################!
   !+++++++++++++++++o%##%%%%%%%%%%%#####@#+:...::+o+++%ooo%#%%########oo%%%%####%%%%o%@@@@@@##%%@@@@@###%#@################!
   !++++++++++++++++++o##%%%%%%%%%%%#######+....::+o+++oooo%##%########%oo%#####%%%%%o%@@@@@@##%%@@@@###%%#@@###############!
   !+++++++++++++++++++%##%%%%%%%%%%%######+:...::+o+:+oo+o###%#####%##%%o%#####%%%%%%%#@@@@@##%%@@@@@##%%@@@###############!
   !+++++++++++++++++++o%#%%%%%%%%%%%######+:...::+o:::oo+%%##%#####%##oooo%%%oo%%%%%%%#@@@@@##%%@@@@@##%#@@@###############!
   !++++++++++++++++++++o##%%%%%%%%%%######+:...::+%+::+oo%%##%########ooo+oo++%%%%%%%%#@@@@@##%%@@@@@##%#@@@###############!
   !+++++++++++++++++++++%#%%%%%%%%%%######::...::+o+::oo%%o%%%%#######oooo+::o%%%%%%%%%#@@@@##%%#@@@@##%##@@###############!
   !++++o++++++++++++++++###%%%%%%%%%%#####+:...::+o+++%+%+%#o%#####%##o%o+:::o%%%%%%#%%#@@@###%##@@@@##%##@@@##%###########!

