ASCII Picture - Example

An example of a picture being transformed to ASCII text.
First, the picture is projected to black and white. Then, it is pixelised, and each pixel gets an ASCII character attached.
The more columns of characters used, the more precise is the picture (the font-size is decrease when we use more columns).

explanations part 1 explanations part 2 explanations part 3

800 columns

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                           .                                                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                             .                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                            .                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                             ..                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                           .                                                                      .               ..:::                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                  ..----:                  ..:.::::..                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                      .                 .           ....:::::...:::   .. ..::-------:::.          .:.:--==--:::::.. .... ...   .                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                    ...  ......   ..-::::.:::. .:----===---::::::::--===++++*++=++=+==-.....--==++++===---:---------=--::...:--:....:-..                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                 ::  ..:::::::-==----::--=--======----====+*******8888888888888**+++*******88888****+++*****88888**++==+++++==-====--:                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                               .:-----:-==+++==-----=+*******8888****88888888888888888888888888*88#8############888888##################88888*+++=----::  ......     .    ..                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                             .                                  ..::.....::::-=+********888***+*8****88888**************888#88888*88888888888888###########8888##################%###%#####8888**+++++++========-----.                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                         .....-------=++*******888**88***88888888888888**88*88***888888888888***8888***888888#####888888#####%###%%%%%%%%%%%%%%%%%%%%%%%%###########8888***++======---::. .....                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                              ..                ..:--:---====++++++****++******8***888########8888888888888888888888888888****8888##88888888888888*888######%###############%%%%%%%%######################88888888888*****+*+++==========----::...  .                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                               ...            :  .:: .:-::-..=+++=--=+****++=+++********8888***88#######8888888###888**8888888888888*88***888888###888888**++***888#######888#888######################################################88888888888***88***+++==---:....                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                      .    ..   .....::    ..:-:.-:::-:--=+++++=++**88**********8888888888888#########8888#888888888888####88888******88*88#####################%%%%%%%%###############%%%%%%%%%%%%%%%%%%%%#############88888888888888888888##88######888*8**++===-:::::-.                                                                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                  ..          .   ..         .:::::...::::::-----==--=***+++*88###88888888*8888###88888##8##########88##8###888###########888888***+*88888###88#######%%%%%%%%%%%%%%#######88####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#############%%%%%%%%%%%%%%%%%%%%%%%%%########88****+=-----.                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                            .....     .    ......::...:...::-:::..::::::-==++++==++******888##888********88888###888#################88888888888888***88***888888888###########%%%%%%%%%%%%%%%%%%%########%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####88*+++=-::::.....                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                   ...                          ::..::.:--:..:-===--=++*8*******88**8****8888888888888#########888888888#####88***88*888888###888888######88888###%###%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%#####%%%####%######%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####88#####8*+==--:.                                                        .                                                                                                                                                                                                                                                               
                                                                                                                                                                                                  .                .  .    ....::...-------=*8########%%########88888**888888888888888###########88888888888888###############88888888*88888888##%%%%%%%%%%%%%%%%%%################888#############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%######888888###8888**++===-::.......                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                .   .:........:....-+++**8##%%%%%%%%%%%%%%%%%%%#####888888888888##########################%%#%###88#8888888#8888##888#888#####%%####%%%%%%%%%%%%%##########%%%%%%%##%######%%######%%%%####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######%%#######%%%%###%%%%#########888###########88888**+=-.....                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                             ...          ..        .::......:..:=*88####%%%%%%%%%%%%%%%%##%%%########88888***88888888888##88###########888####88********88888####888888888888888###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%#%%%%##########%#%##8888*++====---..                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                         .          ::::....::-+*88##%%%%%%#%%%%%%%%%####################88888**8888***8888############88#######%%%%%%%%%%%%##########%%#%%%######%%%%%@@%%%%%%%%%%%%%#%%%@@@@@@@@@@@@@@@@%%%%%%%%%%%%%@@%%@@@%@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%#8+=--::::                        .                                                                                                                                                                                                                                                                             
                                                                                                                                                                                          ..          ..   ...     :::.:...-=*88###%%%%%%%%%%%%%%%%%%%####%###################888888######8888##8#########%%%%%%%%###%%%%%%%%%%%%%%%########%%%%%%##########8888#####%%%%%%%%%%%%%@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%####%%%%####%%%%%%##%%%%%####%%%%%##8*+=-:                   .. .                                                                                                                                                                                                                                                                               
                                                                                                                                                                                          ..        .:.   ..     ::--:::::=*88####%%%%%%%%%%%%%%%%%%%%%%%##%%%%%##################888####%%%#%%###%#####%%%%%###88##%%#%%%%%%%%###%#88888888888888#####8888888888#8888#######88##%%####%%%%%%%%%%%%#%%%#####%%%%%%%%%%##%%###%%%%%%%%%%%%%%%########%##%####%%%%%%%%%%%%%#%%%%##########%##%%##%#%%######%%%%##########88+====--:.    ....:.                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                         .         ..   ...   ..-:.::::=+*88####%%%%%%%%%%%%%%%%%%%%%%%%%######%%%%%%%%%%%%%%###%%%###%%%#####%%%%%%%%%%%%####%%%%%%%%%######888888888*****888****8888#8######%###%###%%##%%%#######888####%%%%%%###88888##888##########%%%%#########%%##%%%%######%%%%%%###%%%%###8#######%%%############88#######%%%%#####%%%#%########88*++===----:::.    .                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                            .   ..    ... ..:---..:++*8888######%%%%%%%%%%%%%%%%%%%%%%#####%%%%%%@%%%%%%%%%%%%%%##%%%%%%%%%%%%######%%%%#######888#####8888888##88888888####888888888##########%%%%%%%%%%%%%%%%%%%%%%%%%%#####%%%###############%%#####%%%%%%%%%%####################%%%%%%%%%#%%%%%%##################################88888##############88**++=-----.:::::..                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                             .:...  ....:::-====++**88888####%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%###%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####88888888888*********8888888##########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%###%%%%%%%%%####%%%%##%%%%%%%#######%%####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####%##%%%%%%%##%#############8888888##############88*++====--:::::::.  ...                                                                                                                                                                                                                                                                          
                                                                                                                                                                                      ..    :::.. .:.::--=*********8888####%%%%%%%%%%%%%@@%%%%%%%%%%%%%@@%%%#########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######################88888888********88##%%%%%%%%%%%%%%%##%%%@@@@%%%%%%%%%%%%%%%%%@%%%%##888######%%%%%%%%##%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%####%%%%######%%%%%%%%%%%%%%%%%%%%%%%%%################%###################8****+==:.                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                     .    .::....:::::-+*8*88888#########%%%%%%%%%%%%%%%@@%###%%%%%%%%%#########%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%@%%%%%@@@@@%%%@%%%%###%%%%%%%%%%@@@%%%%##########%%%%%%%%%##%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########%%%#%%%%%%%%%%%%%%%%#%%%%#########8#######################888*+=--::::                                                                                                                                                                                                                                                                               
                                                                                                                                                                .  .                 ....:::..::--=+==+8#8**888888#####%%%%%%%%%##%%%%%%%%%%%#%%%%%%%%%####%%%###%%%##%@@%%%%%%@@@@%%%%%%%%%%%%%##88888##%###8###88****88#######%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%###%%%%%%%%%%%%%%###%%###########################888**+=--.                                                                                                                                                                                                                                                                             
                                                                                                                                                             .  .               .:::::::-:.:-=+++**+++8##888*888#8####%%%%%%%%###%%%%%%%%%%%%%%%%%%%#%%%%%%%%@@%%%%%%%###%%%%%%%%%%%%%%%%%%####%%###########888#########%%%######%%%%%%%@%@@@%%%@@%%%%%%%%%%%%%%%%%##%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####88888888888####%%%%%%%%%%#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%%%%%%%%%%#################################88**++-:::.                                                                                                                                                                                                                                                                         
                                                                                                                                                            ..  .           .......:::::--++++**+*8888#####8#######%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%#%%@@@%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###888888888888###8888####88888#88###%%%@%%@@@@@@@@@@@@@%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######8888888######%%%%%%%%%%%%%%%%%%%#%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%##%%%%%%%%##%%%%%%#########%%%%############888*++--:::                                                                                                                                                                                                                                                                     
                                                                                                                                                              .       .  ...:..:::----===++***+=+8################%%%%%%%%%%%%%%%%##%%%%%%%%%##%%%%%%%###%@@@%@@@@@@%%%%@%%%%%%%%%%%%%%%%%%%%%##8888#888888888###%%%%###%%%%%%%%%%%%%######%%%@@@@@@@@@@%%%%%%%%%%%%%%%%%%########%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%##########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%##%%%#####%%%##%#####%###############88888*++-:..                                                                                                                                                                                                                                                                  
                                                                                                                                                               ..           .:---===+++++*8888888###88#%########%%%%%%%%%%%%%%%%%#%%%%%%%%%%%###%%%%%#%###%%%@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####888###8888####%%%%%%%%%%%%%%@@@@@@@@@@%%%######%#####%#######%######%%%####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@%%%%%%%%%@@@@@%@@@%%%@%%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%###########8888*+=-:                                                                                                                                                                                                                                                                 
                                                                                                                                                     .....       .:  ..   .:-===+**8888888###########88########%%%%%%%%%%%%%%%%%##%%%%%%%%%%%####%%%%#%%%#%%%%#%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%########8888###%%%%%%%%%%%%@@@@@@@@%%####888888888##888888########%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###########8888*+=---:.                                                                                                                                                                                                                                                           
                                                                                                                                                   .      .:..    :-:::::=+*****8#88**8###########8888######%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%####%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%###%%%%%%%%%%%%%%%%%##%%##%%%%%%%%%%%%%#######888888888888######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#######%%%@@@@@@@@@@@@%%%@@@@@@@@@@@@@@%%%%%@@@@@%%%@@@@@@@@@@@@@@%%%%%@@@@@@@%@@@@@%%%@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########8888**+==:.                                                                                                                                                                                                                                                          
                                                                                                                                                              :::====+==+8888***8##*88##888888888##########%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%#8#%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%#####%%%%%%@%%%%%%%%%#%#%%#%%#####888888**********8888888#######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%#8888##%%%%%%%%%%%%%%%%%%%%@@@@@%@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@%@%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%############8**++=-::..                                                                                                                                                                                                                                                     
                                                                                                                                                           ...:----==+++8888++*888##########88*8#########%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%##%%%%%%%%%%%%%%%%##%%#%%##########%%###%#################88#888888888****++***88######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%####888###########%%%%%%%%%%%%##%#####%%%%%%%%@@@@@@@@@%%%%%%%%%%%%%%@%%%%@@%@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########88*+=-  .                                                                                                                                                                                                                                                    
                                                                                                                                                     ..--:-==++==-=+*88888*+***8#8###################%##%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########################8888######88#####8888888#####8********8*88#######%%%%%%%%%%%%%%%%%%%#%%%%%%%###88##%%%%%%%%#####%%%##%%%%###########8#######%%%%%%%%%%%%%%%%%############%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########888*=-...  ...                                                                                                                                                                                                                                             
                                                                                                                                          ... ..:-=--==-=+++++***888#############8#8##%%#8#%%%%%######%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%##%%%%%%%%%%%%%%%%%%%%%%%##88######88#######888888####88888888888888888******8888888888####################%%################%%#########%#############%%%%%%####888###%%#########%%%%%%####%##888################%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########8*+==---:                                                                                                                                                                                                                                             
                                                                                                                                               .-++===:.-**++=+=+*8################8####%%##%%%###########%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%######%%%%%%%%%%%%%%%%%%%%%%%%%##8888###8888888888****8888##8888##8888**88#####8888888##8#8888###%#########%#########88888###88888#%%%####88####8888##%%%%%%%%%%%%%%###88###############%%%%#88####888*8888############%%%%%%%%%%%%%#%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%########88+==---:                                                                                                                                                                                                                                           
                                                                                                                          .                     :=+=++=:-**++*+=+8##########################888###%%%%%##%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%####888888***88**********8888888###########################################%%%%%%%%%######################%%#########88###%%%%%%%%%%%%%%%#############8#8######88#####8888888################%%%%%%####%%####%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######%%%###%######88**+==-:.                                                                                                                                                                                                                                         
                                                                                                                                                .:--=+*-:+*+=++=+#%%####################888##%%%%%%######%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%##%%%%%%%%%%%%%%%##8#%%########8####88**8####8888#88888***888#####888888888888******888####################%%%%%%%%%%%%%%%%%##########%######%%%%%##%%#######%%%%%%%%%%%%%%###%%%%######%%%#############8######%#########%%%%%##88##%#%###%%%%%%##%###%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###################8888*+=:::-::.                                                                                                                                                                                                                                    
                                                                                                                                                  :--=++:-*8*****#########################%%%####%%%%%%%%%@@@%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%###%######88888888####8888############888888888888********88###%%%%%%%@@@%%%%%%%%###888###########%%%%%%%%%%%%%%%####%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######%%%#%%%%%%%%##%%%%%%%%#####%%##%%%%%%%%#####%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########%%%###%###########88888*+=-::::.                                                                                                                                                                                                                                    
                                                                                                                                 .                 :-==*+=+*88*88#############################%#%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%#%####%%%%###%%@%%%%%%%%%%%%%%%%%%%%%%%%#####88888***888*88###888888888##88***888888#####%##%%%%@%%%%%%%@@@%%%%%%%##88#8###########%%%%%%%%%%%%%%%#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########8###%%#####%%%%######88888888**+=-:......                                                                                                                                                                                                                               
                                                                                                                                   ...           . .-==+**+*8888#################88###%%%%%%%%%%%%%%%#############%%######%%%%%%%%%%#%%%%%####8#%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###8888888**888###8#%%%%%%%%###%%%%%%%%%@@@@@%%@%%%%%@%@@@@@@@%%%%%%#############%%%%##%%%%%%%%%%#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############%%%%####%%%#####888888888**+=-::.                                                                                                                                                                                                                                
                                                                                                                           .   ..     ..::.::::.. .:--==+***8#8#########8888############%#####%%#################%%########%%%%%%%%%%#%%%%%%%%%###%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@%%@@@%%%%%%%%%%@@@@@@@%%####%%%%%%%%%%%%%%@@@@%%%%%%@@@@%%%%@@%%%%%%%%##################%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%#########################%####8888888**+==---..                                                                                                                                                                                                                            
                                                                                                                      .                    ..   . .---=-=+8****888888888888####################%%%%%%##%%%%%%%%%%%%%#######%%%%%%%%%%%%###%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@%%%%%@%%%%%@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%####################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%###########################888888**=--:.                                                                                                                                                                                                                              
                                                                                                                                                   ::.:==+*888***888#88#88###############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%#%@%%%%%%%%%%%%%%%%%%%%@%%##%%@@%%%%%%%%%%%%%%%%%%%%@@@@%%%@@%%%%%@@@%%%%%%%%@@@%@@@@@%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%######%%%%%%%%%%%%%%%#################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########%###############888888*+-:.                                                                                                                                                                                                                              
                                                                                                                                                   ::..-+===+*+8*++*888888888888#########%%%%%%%%%%%%%%#####%%%%%%%%%%###%%#%%%%%%%%%%%%%%%%#%%%%%%%%%%%##%%%%%%%%%%%@@@@@@@@%%%%%@%@@%%%%%@%%@@%%%%%%%%%@%%%%%%%%%%%%%%%#####%%###%%%%%%###%%%%%%%#######%%%%%%%%%%%%%%#################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%################8888*+=--:.                                                                                                                                                                                                                          
                                                                                                                                                   .....:==-=+++88++*888#####88###8888#######%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%@%%%%%%%%%%%####%%%%%%%@%%###%@@@%%%%%%%%%%%%%%%@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%##%%###%####%%%####%###%%%%%%%######%#####%%%%%%%%%##%%%#######%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%###################88*=-:::..                                                                                                                                                                                                                     
                                                                                                                                                    ......-=---+*88**888888##########8########%%%#####%%%#%##%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%#%%%%%%@%%%%%%%%%%@%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#############8###%%%###%#######%%%%%####%#############%#############%%%%%####%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@%%%%%%@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##################8*==----:                                                                                                                                                                                                                   
                                                                                                                                                     .....::-==-+*****88888888######888########%%%%#############%%%%%%%%%%%%%%%%%%%%%@@@%%%%@%##%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%############%%%%%%%%%##%%###############88#%%###%%#############%#################%################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%@@@%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########%%%%####8***+=::.                                                                                                                                                                                                                
                                                                                                                                    ..               ....:::.:==-=******88888888###888888########%%#######################%%%%%%%##%%%%@@@%%%%%##%%@%%@@@%%%%%%%%%%%%%%%%%%%%%#######%%%#########888888#88###################88###8#####88#######%%%%##############%#################################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###############88+-:::.                                                                                                                                                                                                              
                                                                                                                                                    .....::.  .:++=+***+****88888##88888*8#########%%########################%######%%%%%%%%@%%%%#%@%%%%%%%%%%%%#%%%%##########################88888888888888888888#8888888888888#888#88#88############################################################################%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%@@@%%%%%%%%@@@%%%%@@@%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%@%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###############8*=--::...                                                                                                                                                                                                          
                                                                                                                                       .        .        ..    .:-=+**++****8888888##888*8888#####################8888##888###%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########8888888######888888888888888888888*888888888888888888888888888888888888########################################################################%%%%%%###%%%%%%%%%%%######%%%%%%%%%%%%%%%%%@%%%@@@@@@@%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%###########8*+=-::.                                                                                                                                                                                                          
                                                                                                                                    ..                         .:..-+**+*++****888888888*88888888##8###########8####888###88######%%%@%%%%%%%%%%%%%%%%%%%%%%%%%###888888888888888888888888888888888888888888*88888888888888888888888888888888888888####888#######################88######################%######%###################%%%%%%%%%%#######%%%%%%%%%%%%%%%%%@@@%@@@@%%%%%%@@%@@@%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@%%@@@@@@@@@%%%%%%@%%%%%%%%%%%@@@%%%%%%%%%%%%%%%%%####%%%%%%#############88*++==:..                                                                                                                                                                                                       
                                                                                                                                    ..              .          .:::::-=+**+=+******88**88888**88888888888######################%%%##%%%@@@%%%%%%%%%%%%%%%%%###8888888888888888888888888888888**********888888**888888888888888888888888888888888888888888888888888888888888###88888#####8888888888888##################################%%%%%%%%%%########%%%%%%%%%%%%%%%%%%%%%%@@%@@%%%@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@%%%%%%%%%@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%##########88888**++==-.                                                                                                                                                                                                      
                                                                                                                                                               :::-:::--=+8*++++****88*888888*88##88***88888####################%%%###%%%@@%%%%%%##%%%######888**8888888888888888888888**********+++*******************8888*****888888888888888888888888888888888888888888888888888888888888888888888888888888############888#####888######%%%#%%%%%%########%%%%%@@@@%%%%%%%%@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%#######8888*+=-====-:..                                                                                                                                                                                                  
                                                                                                                                                              :: ..::.-:-+++************888888888####88**88888######%############%%%%###%%%%%%%%%%%%%###88888***88888888888888888888888*******++++++++++++++++++++++++++++++*******************88*******88*********************88888888888888888888888888888888888888#############888888##########%%%%#########%%%%%%%%%%%%%%%%%%@%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%######8888**+--:-:::-.                                                                                                                                                                                                 
                                                                                                                                                             .:  :::.::::=+++==+88*****8*8888888888888888*88**8888##%%%%########%%##%%%##%%%%%%%%%%###88888*************8*******8888888**********++++++++++++++++++++++++++++++++++++*******+++*****++************************************888888888888****8888888888888888###########888888#########################%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%######8888*+-::::::                                                                                                                                                                                                 
                                                                                                                                                          .  :   ....:::::-=++==+**8**8*8888**88*88888#88*888*888888###%%########%%%%%%%%%%%%%%%%%##88888******************************************************++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*********888888****88888888888888888#########88888888####################88###%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%#########8*+=--::::.                                                                                                                                                                                               
                                                                                                                                                            ..       .::-:..-=**++*++*8888888*88888888888***888888####8##%%#######%%%##%%%%%%%####88888**********+++++++++++++++*******+++++********************+++++++++++++++++++++++++++++++++==++++++=======================+++++++++++++++++****88888*************8888888888#####88888888888888#88888888888888888#####%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%#####888*+=--:::::                                                                                                                                                                                              
                                                                                                                                                          ...     .     :-:..:=++++====++*8***888*8#88*8888**8888888###8##%%%%%##########%%###8888888*************++++++++++++++++++++++++++++++++++++**********+++***++++++++++++++++++====++++=============---------==================+++=+++++++++************************88888888888888888888888888888888888*******888#####%%%%%%%%%%%%@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@%%%%%%%%%%%%%%#######888*+=-:                                                                                                                                                                                                 
                                                                                                                                                          ::             :-:::--=+***+====+++*****88##8**8##888888888###%%##%##############888**********+++++++++++++++============================++++++++++++++++++++++++++============-======-------------==--------------------==========++++++=+++++++**********+++++++********888888888********8888888888888********88888#####%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%##%%%%%%%#####88#88*+-::                                                                                                                                                                                               
                                                                                                                                                          ::.     .      .:-:-:-=--+**++=--==+***88888#888#####8888888####%############8888****++++++++============+++===--------------====================================------:------------------------::---------------------------============++++++++++++++*+++++*+++++++*********8888************88888******************8888#####%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%#####%%%%%#####88**=-:::                                                                                                                                                                                             
                                                                                                                                                         .::.              :-:..-====++*++=====+***8888888#####888888888888###########888***++++++++===-----------===----------------------------------------------------::::::::::::::::::---:-----------:::::::--------------------------================++++++++++++++++++++++++************************************************8888#####%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%########%######8*+=--.                                                                                                                                                                                             
                                                                                                                                                         ..         .  .    ::..::=++===++==++****88###88########8888**88#####%%####8******+++========-------------------:--------::::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----::::::::::-----------------------------==-=============+++++++++++++++++++++*************************************************888#######%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%##############*+--:.                                                                                                                                                                                            
                                                                                                                                                         ..        .:      .:::::.:-=++=====+++**8888##8888##########88***###%##888***++++++++=++====-----------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::::::::::::::-------------------------------------========++++++++++++++++++++++************************************************88888#######%%#%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%##############8*+-                                                                                                                                                                                             
                                                                                                                                                         ::          .     .::::-:--::-===-=++*888888888##88########%###8**###88***++++++++++++++++=-----::::-------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::-::::::::::::--:------:------------------------------========+++++++++++++++++++++*******************************************88888888#########%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%###########8*+=:                                                                                                                                                                                          
                                                                                                                                                         ..          .  .  .:::.:--::..-+****88888##8######88####%%%%%%%##8888***++++++++++++++++===--:::::::-----:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::------------------------------------------=======++++++++++++++++++++++++++++*****************************888*88888888#######%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@%@@@@@@@@@@@@@@@@@%%%@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%#######%##8**=::.                                                                                                                                                                                      
                                                                                                                                                         .:             .    .::.-------=*888888###################%%%%%##8*****++++=++++++++======---::::::::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------------------------------------==============================++++++++++***************************8888888########%%%%%%%%%%@%%%@%@%@@@@@%@@@@@@@@@%%%%%@@@@%%%@@@@%%@@@%%@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%########8*++=--:..                                                                                                                                                                                 
                                                                                                                                                         .:.         .  .  .  :::--=++++*88888#########################888***+++++++++=========-----:::::::::::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------------------======-==============-------===--============++++++++++*************************8888#######%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%########8++=-:                                                                                                                                                                                    
                                                                                                                                                         :   .        : ...:  .-=--=+**88#888###########8#############8*******++++++===-----------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:::::---::::--------------------------------==================-----------------------===========++====++++++++++++++++++*++****888#######%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%@%%%%%%%%%%%%%%@%%%@@@%@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%######88*=-:.                                                                                                                                                                                   
                                                                                                                                                        ..    .       .. :...::-=---=+8888#########################88**+++++**+++++==-----------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------::----------------------------------=--========---------------===----===-----===========================+++++++++++***88#######%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@%%@@@@@%%%%%%@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####88+=-:..                                                                                                                                                                                 
                                                                                                                                                         .             ..::::..:-==+*8#88#########################8*+++++++++++++++====----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::--::-----------------------------==---=----=========----------------------===----===========================+++++++++++++*888##8###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@%%@@%%@@@@@@@%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%###8*=--.                                                                                                                                                                                  
                                                                                                                                                         .              .  :...::-+88#8########888888##########88*==++++=========++===----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---:::::----------------------------------------------====------------------------------===========================++++++++++++++**888888##########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%@@@@@@@@@@@@@@%@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88*+=-:                                                                                                                                                                                
                                                                                                                                                        ..              .   :..::=*8#####%%%%###############%#8+======+===------====-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..::.:.....::::::::::::::::::::::::::::::::::---:::::--::::::---------------------------------------------------------------------------------============================+++++++++++*******888888#8####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%####%%###****=:                                                                                                                                                                               
                                                                                                                                                                            :::.-++88########%%####%########8*=-----===----------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::........::::::::::::::::::::::::::::::::::::::::::::::::-::::-------------------------------------------------------------------------------------===========================++++++++++++*******88888888###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%@@@@@@@@%%%%%%%%%%@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%##%##8*+++==-:                                                                                                                                                                             
                                                                                                                                                                         ..    :+*8####%%###%%############8+=---------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..........::::::.:::::::::::::::::::::::::::::::::::::::::::-----------------------------------------------------------------------------==-==================================+++++++++++++******888888888#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@%%@@@@@@%%%%%%%%%%@@%%%%%@@@@@%%%%%%%%%%%%%%##%%%%######88*=----:.                                                                                                                                                                          
                                                                                                                                                                         .:. .:=++8##%%###%%%######88####8+---------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.............::::..::::::::::::::::::::::::----::::::::--------:-------------------------------------------------------------------------==-==============================++++++++++++++++++*****888888888888####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%@@@@%%%%%%%%%%%%%%@@%%@%%%%%%%%%%%%%%%%%%%%%######88*=----:.                                                                                                                                                                         
                                                                                                                                                                         ..:::-=-*####%%%#%%######8888#8*=----:--------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..::::::::::............::::::::::::::::::::::::::::::---:::::::-------------------------------------------------------------------------------------===================++====+++=====+++++***************888888888888888######%#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%######*==---::.                                                                                                                                                                        
                                                                                                                                                                             :===88##%%%##%#######88888+----------:::::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..::::::::::::::::::::::::::::::::::::::::::::::::::--::---------------------------------------------------------------------------------=====================+============+++++**+*************88888888###8888######%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####8*+-::.::                                                                                                                                                                        
                                                                                                                                                                            .:=+*####%#88#%######8888*=-:------:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::...:::..........::::::::::::::::::::::::::::::::::::::::::::::----------------------------------------------------------------------=------===========================+=++++===++++++*+**+**+*******8888888888888888#######%%%%%%%%%%%%%%%%%%%%%%%%%%%%######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88*+-.  ...                                                                                                                                                                     
                                                                                                                                                                           ..:=+*###%%#*8###8###8888+-------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..:::::..:::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------------------------------==----------======================================+++++++++++*+++++++***++++*****88888888888888888########%%%%%%%%%%%%%%%%%%%%%%#####888###%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####8*+=.                                                                                                                                                                        
                                                                                                                                                                           ..:=+*###%%#88#88###888*=-:----------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------------------------------------------====-=---------======================================++++++++++++***+******+**********888888888#8#################%%%%%%%%%%%%%%%%######88####%####%%@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####*+==--                                                                                                                                                                      
                                                                                                                                                                           . :==*#####88888##8888*------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..::::::::::::::::::::::::::::::::::::::::::::::::-----------------------------------------------------------====================-----=============================+++++++++++****************888***88888888888888####%####%#%##%%%%%%###%%%%%%%%%####88#%%######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####8*--=-.                                                                                                                                                                    
                                                                                                                                                                           .  -+*###8*888###8888*-::-::--:::::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-------------------------------------------------------------==================================================+++++++====++++++*****************8888888888888########%%%%##%%%%%%%%%%#%%%%%%%%%%%%%%##8##%%%%####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%######+:::--:.                                                                                                                                                                 
                                                                                                                                                                           .  -+*#8888***8888**+=-::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---------------------------------------------------------------===================================================+++++++++=+++++++++*************88888888888888##########%%%%%%%%%%%#%%%%%#%%##%%%%%%%%%###%%%%%%##%%%%%%@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###*+=--:::                                                                                                                                                                
                                                                                                                                                                              -+*##**8*8*88888+-:-::-------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::--------------------------------------------------==---------=====================================================++++++++=+++++++++***********888888888888888###########%%%%%%%%%%%%%%%%##%%#%%#####%%#%%%%%%%%%%#%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####8*+--.                                                                                                                                                                
                                                                                                                                                                             :--*88*+++**8888*=-::--:------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---:-------------------------------------------------------------============================================+=+++++++++++++***++++++++************8888888888888##8888########%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%%%%%%%%%%%%%@%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###8*++=:                                                                                                                                                               
                                                                                                                                                                             :::+8#*==-+**88*=-:::---------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------------------------------================================================+++++++++++++++++++++++************888888888888888#############%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###*==.                                                                                                                                                              
                                                                                                                                                                            .-:.=**8*=-=++++=-:--:::-----:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------------------------------------------=-====================================================+++++++++++++++++++++*++*************88888888888############%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####+-:.                                                                                                                                                             
                                                                                                                                                                            .-:.-===++=---=--:--:::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:--------::------------------------------------------------=======================================================++++++++++++***+++*+************8***8888888888888#########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@%@@@%%%%%%%%%%%%%%%%%%%%%%###888+-:                                                                                                                                                             
                                                                                                                                                                            .: .:-+--++==---:--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----::------::------------------------------------------------===================================================++++++++++++*+++++**+**************88888*8888888888888##########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%@@@@@@@@%%%%%%%%%%%%%%%%%%%%######8**+=:                                                                                                                                                            
                                                                                                                                                                             :  :------===---:::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:::------------------------------------------------------=====================================================+===++++++++*++*********************8888888*888888888############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@%%%%%%@@%%%%%%%%%%#%%%###8*===-:                                                                                                                                                           
                                                                                                                                                                             :  .:-:--==--::-:::-::::::::-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..:::..::::::::::::::::::::::::::::::::::::::::::::::::::------------------------------------------------------=======================================================++++++==+++++***************************888888888888888888####%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%@%%%%%%%%%%@@%%%%%%@@@@%%%%%%%%##%%%%#8+===::.                                                                                                                                                          
                                                                                                                                                                            .:.  .--:-=---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::...::::.::::::::::::::::::::::::::::::::::::::::::--::::::::::------------------------------------------------------======================================================+=====++++++++***************************888888888888888888########8##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%@%%%%%%%%%%@@%%%%%%%%%@%%%%%%%##%%%%%#8==-:..                                                                                                                                                          
                                                                                                                                                                                 .:=::---:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::...:::::::::::::::::::::::::::::::::::-----------------------------------------------------------======================================================+++++++++++++++*********************8888888888888888888888#######%%%##%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%@@@@%%%%%%%%%%%%%%%%%%%%%%%8=-:::::                                                                                                                                                        
                                                                                                                                                                                 .:---:-:---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::....:::::::::::.::::::::::.:::::::::::::::::::::::::::-:::::::::---------------------------------------------------------=======================================================+++++++++++++++**********888*8888888888888888888888#8888888#######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%#8=-::.:..                                                                                                                                                      
                                                                                                                                                                            .     ::---:-:----:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::....:::::::::::::::::::::::::::::::------::----------------------------------------------------------=========================================================++++++++++++++++******8888888888888888888888888###88888888#######%%%%%%%%%%%%%%%%%%%%%%%%%@%%@@%%%%%%%%%%%%%%%%@@@@%%%%%%%%%%%%@@@%@%%%%%%%%@@@%%%%%%%%%%%%%%%%#%%%%##8+=:::.   ::..                                                                                                                                                 
                                                                                                                                                                            .     ..::---:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.:::::::::::..::::::::.:::::::::::::::::::::::::::::----------------------------------------------------------------===========================================================++++++++++++++++*******8888888888888888##########88888888888#######%%%%%%%%%%%%%%%%%%%%%%%%%%@@@%%%%%%%%%%%%%%%@@@@%%%%%%%%%%%%@@@@@@%%%%%%%%@%%%%%%%%%%%%%%%%%%##%%##8+==-.                                                                                                                                                         
                                                                                                                                                                                   .::---::------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..::.::::::::::.:::::::::::::::::::::::::--------------------------------------------------------===---============================================================++++++++++**++++**********888888888888###################8888##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%%@@@@%%%%%%%%@%%%%@@@@%%%%%%%%@@@@%%%%%%%%%%%%%%%%%#%%###*=--:::..                                                                                                                                                     
                                                                                                                                                                                 ..::----::------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::....::::::..:::.:::::::::::::::::::::::::::::::::::::-----------------------------------------------------==--===========================================================+++++++++++++************88888888888888#####################888##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%@%%%%@@@@%%%%%%%%%%%%%@@%@@@%%%%%%%@@@%%%%%%%%%%%%%%%%%%%###8+-:                                                                                                                                                          
                                                                                                                                                                                 ..::----:-----:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.....:::..:.:::::.:::::::::::::::::::::::::-::--:::::-:------------------------------------------------------=================================================================++++++++++++++***********88*8888888#############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%%%%%%%%@%%%@@@@@@@@%%%%%%%%%@@@%@%%%@@@@%%%%@%%%%%%%%%%%%%%%%%%%%##8*=-:.                                                                                                                                                        
                                                                                                                                                                                 .:::::::-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.::::::::::::::::::::::::::::----------------------------------------------------------------=============================================================+++++++++++++++++***********88888888################################%%%%%%%%%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%@@%%%%@@@%%@@%@%%%@%@%%%@@@%%%%@%@%%%%%@%%%%%%%%%@%%%%%%%%%%##8*=--.                                                                                                                                                       
                                                                                                                                                                                 ::::::::-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::::::::--::::---::-::::---:::.:::::-::--------------==--------------------------==-------======---------------------===========================================================+++++++++++++++++++++*******8888888888###############################%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%@@@%%%@@@%%%%%%@@%%@@@%%%@@@@%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%#####*+=--.                                                                                                                                                      
                                                                                                                                                                               .:--:::::-------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::::::::-::::::--::=-:-:---::-:::------:::::---:::::----------======================-------=====++++================------------================================================================+++++++++++++++++**********888888888##############################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@%%%%@@@%%%%%%@@%%@@@%%@@@@@%%%@@%@@%%%%%%%%%%%%%%%%%%%%%%%%##88+--:..                                                                                                                                                     
                                                                                                                                                                               .:--::-------------::::::-:--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----:-::--::::-------:==--=---===--=-:----------------------------=====++===+++++++++++++++++++===========++++++++++++++++++++===-------==-====--============================================++++====++++++++++==++++++++***********8888888888#########8###############%#%%%%%%%%@@@@@%%@%%%%%%%%%%%%%%%%%%%%##%%%@@%%%@@@@%%%%%@@%%@@%%%@@@@@%%%%@%@@%%%%%%%%%%%%%%%%%%%%%%%%##88+-:                                                                                                                                                        
                                                                                                                                                                             .::::---------------------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::------::--::----====--=+===---+====---===-===========================+++++++++=+*++***+++**++++++++++++++++**+++++++++++++++++++++=====-----===================================================+++====+===++++++++++++++++**********888888888888#################%%%%###%%%%%%%%%%%%%@@@@@%%%%%%%%%%%%%%%%%%%%%%%#%@%%#%%@@@%%%%%@@%%%%@@@@@@@@%#%%@%@@@%%%%%%%%%%%@%%%%%@@%%####88*=:                                                                                                                                                        
                                                                                                                                                                            .::::----------------------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:-::-------:-------=======-+++++=--+===+++=+++====+++======+++***++++**********************8888888*888**88********++++++++++++++++****++++++++===-=--=======================================================++++++++++++++++++++++++*****8888888888888#################%%%%%%%%%%%%%%%%%%%%@@@@@@@%%@@%%%%%%%%%%%%%%%%##%@%%#%@@@@%##%@@@%%%@@@@@@@@%%##%@%@@@@%%%%%%%%%%%@%%%@%%%%#####8*+-.                                                                                                                                                       
                                                                                                                                                                           .::::::----------------------:----:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----:--=---=--=-----===--=*++8+++++=+*++**++++*********+**888***8888***888888888**888888****+*****88888*******************++*++++++++++++*****++***++===========================================================++++++++++++++++++++++*****88888888888888############%%%%%%%%%%%%%##%%%%%%%%@@@@@@@@@@@@%%%%%%%%%%%%%%%##%@%%%%%@@@@%##%@@@%%@@@@@@@@@@%#%%%@@@@@%%%%%%%%%%%%%%%@%%%%##%%%8*=-:                                                                                                                                                       
                                                                                                                                                                           ::::::::--------------------------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--==-:--=-=======-==-=---=***8*=+*+++*8***+**8888888***888888888888######8888888####8888**88888***888888888***888*****88888********+++++***++******+++**+++=====================================================++++++++++++++++++++++++******8888888888888#############%%%%%%%%%%%###%%%%%#%@@@@@@@@@@@@%%%%%%%%%%%%%%%##%%%%%%@@@@@%%%%%@@%%%@@@@@@@@@##%@%%@@@@%%%%%%%%%%%%%%%@%%%%####%#8+-:.                                                                                                                                                      
                                                                                                                                                                          .:--::--------------------------------::::::::::::::::::::::::::::-::::-:::::::::::::::::::::::--==-:-==--==+===-======+88*8*+**+**8#**8888888#88***8888888888888888888############8888#8888######8888*888888888888888###888888888888*******************88**++====================================+++==+++++++++++++++++++++++++++++++********888888888888#######%%####%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@%%%%%%%%%%%%%%%%%@@%%%%@@@@%%%%%%@@%%%@%%%@@@@%##%@%%@@@@%%%%%%%%%%%%%%%%%%%%%%####8+--:                                                                                                                                                      
                                                                                                                                                                         :::--------------------------------------::::::::::::::::::-::::::::::::::-:::::::::::::::::::::--==---==-=+++====++++**#8**8*888***8#*88888888***888##8888###########%%%########8888888#########8888***888**888888888888*88888888888888#888888888888888888****88*+========+=++++===================+++=+++++++++++++++++++++++++++++++*********888888##888####%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@%%%%%%%%%%%%%%%@@@%%%%%@@@@%%%%%%@%%%@@@@@@@@@%%%%%%%@@@@@%%%%%@@%%%%%%%@%%%%%%####8+-.                                                                                                                                                       
                                                                                                                                                                        .:---------------------------==--------:---:::::::::::::::::----::::::::::---::::-----:::::::::::---==--====+++======+*8#8*8888888*8###888888888888###88####88#############88#################8#######88888888888888888888888888888888######88##########8888888888888*++==+=====+++++++++++=++===+===++=+++++++++++++++++++++++++++++++++********8888888##8########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@%%%%%@%%%@@%%%%%@@@%%%%@@@@%%%%%%@@%%%%@@@@@@@@%%%%%%@@@@@@%%%%%@@@%%%%%%@%%%%%%%###8+=-                                                                                                                                                       
                                                                                                                                                                       .:-------------==---==-----=-======-----:----:::::::::::::::::--::::::::::-----::---:--:::::::::------+==+++=+*+++==+*8*##88#8##8888#8##88888888###8#######%#########88888########888*888888##########888888888888888888888888888###########################888####888888*+==+=====+++==++++++++===+====++++++++++++++++++++++++++++++++++*********88#888888#######%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@%%%@@@%%%%%%%@%%%%%@%%%%%%@%%%@%%%%@%%%@@@@@@@@%%%%%%%@@%%@@%%%%%%@@%%%%%%@%%%%%%%##8*+=-:.                                                                                                                                                     
                                                                                                                                                                      ::---=---=========+=-===----============-------:::::::::::::::----------:-------------:::::::::::------+++==******++*8888#88##88888##%###888888888######%%%#################%%%##########%%%######888888888888888888888888888****888##88888888######################%##888888*+++=====+++++++++++=====+++++++++++++++++++++++++++++++++++++++*******888888888#######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@%%%%@@@%%%%@@%%%%%%%%%%@@@%%@@@%%%@@@@@@@@%%%@@@@@%%%%%%%%%%%@@%%%%@@%%%%%%%%##8*=-:                                                                                                                                                      
                                                                                                                                                                     :--=-==========++===+======---======+====--------:::::::::::::::::::---:------::----::::::::::::::-----=+++=+*8*+*8**8888##8##8##88##%%#8##88#####%####%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##########8888888**8*********888888888888888888888###88##########################88888*++++=+++++++++++++++++++++++++++++++++++++++++++++++++++++++++***+****8888888#######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@%@@@@@@@@%%%@@@@@%%%%%%%%%%%%%%@@@@@@@@#%@%@@@@@@@%%%@@@@%%%%%%%@@%%%@@%%%%@@@%%%%%%%%##8*=:                                                                                                                                                      
                                                                                                                                                                   :--================+++++++++++===+++++++=+==-===----::::::::::::---------------:::----::-::::::-::::----=++++***8+**888888888#%#8##8############%%%%%%##%%%#####%%%%%%%%%%%%%%%%%%#############88888888888******88************++************88888888888888888################8888888****++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***8888888########%%%%%%%%###%%%%%%%%%%%%%%%%%%%%@@@@%@@@@@@@@%%%@@@@%%%%%%%%%%%%%%%@@@@@@@%#%%%@@%@@@%@@@@@@@%%%%%%@@@%%%%@%%%%@@@%@%%%%%%##88+-:::.                                                                                                                                                  
                                                                                                                                                                 .:-=============+==+=+***+*******+==+***+*+++=-=-----:-::::--:::::-------------------------::::::--:::--==+++*+***8**888888888######8######%#%###%%#####%%%%##%%%%%%%%%%%%%%%%%%%%###%%%######8888**********++****+******+*+++++++++*****************++***888888888888888888#8888#888#88*****+++++***++++++++++++++++++++++++++++++++++++++++++++++++++++***88888########%###%%%%%%##%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@%%%@@@@%%%%%%%%%%%%%%@@@@@@@@%#%@%@@%@@@@@@%%@@@@@%%%%%%@%%%%%%%%%@@@@%%%%%%%%%#8*=:::::.                                                                                                                                                
                                                                                                                                                                :=========++*****+++*+++**88******8*+=+*****++=====------::::-:::-----------------------------::--------=+===+*******8#88#88888######8####%##%#8#%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####888888****++++++++++++++++++++++++++++++***+++++++++++++++++++++****88888888888888888888888888888888**+++++++++++++++++++++++++++++++++++++++++++++++++++++++++****8888#8##########%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@%%%@@@@@@%%%%%%@@%%%%%%@@@@@@%%%%@@@@%%@@@@@@%@@@@%%@%%%@@%%%%%%%%%%@%%%%%%%%%%%##8*+-:  .                                                                                                                                                
                                                                                                                                                               :==+++++++**8888*888++*8****88*888**88*++*8*++++====-------::::::::-----------------------------=-------====++*++****88##8888#888888###%%##%#########%%%%%%%%%%%%%%%%%%%%%%%##%#%%#######888888****+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++****88888888###8888**8888888888888888**++++++++++++++++++++++++++++++++++++++++++++++++++++******8###8############%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@%%%@@@@@@%%%%%@%%@%%%%%@@@@@%%%%@@@@@@@@@@@@@@@@@@%%%%%%@@%%%%%%%%%@%%%%%%%%%%%%%%8+=+=:                                                                                                                                                  
                                                                                                                                                              -=++***8888888888#######8#888888#888888##8****++++++=------------::::----------------------------===-----====+*+++*++*888#88#88###8######88#%%####%%%%%%%%%%%%%%%%%%%%%%%%%###%%%#####8888888888*******++++++++++++++++++++++++++++++==++++++++++++++++++++++++++++*****88888#####888***88888888888888**+++++++++++++++++++++++++++++++++++++++++++++++++*******8###88###########%%%%%%%%%%%%%%%%%%%%%%@@%%@@@@@@@@@@@@@%@@@@@@@%%%%%%%%%@@%%%%%%@@@%%%%@@@@@@@%@@@%%@@@@@@@%%#%%@%%%%%%%%%@@@@%%%%%%%%%%#*-:-==-:                                                                                                                                                
                                                                                                                                                            -==**88888888################88888888888888888***+++++==-------------::---------:---------------------===--===++****+**88888888#88#########88#%%#%%%%%%%%%%%%%%%%%%%%%%%%#############888888888888**********++++++++++*+++++++++++++++++++++++++++++++++++++++++++++++++++*****88888##88888888888888888***8*+++****++++++++++++++++++++++++++++++++++++++++++*****88##88#######%%###%%%%%%%%%%%%%%%%%%%%%%@%%@@@@@@@@@@@@@%%@@@@@@@@@@%%%%@@@%%%%%%@@%%%%%@@@@@@@%@@%%%@@@@@@@%%%%%@@%%#%%%%%%@@%%%%%%%%%%%#8=:-::--.                                                                                                                                               
                                                                                                                                                          :=++*8888888888################888####8##88888888**+++++===------------:---------------------------------=+=----=++**++88*88#8####88#############%%#%%%%%%%%%%%%%%%%%%%###############8888888888888888*******************+****+++++++++++++++++++++++++++++++++++++++++++++++++++*****888888888888888888888**8**+*****+++++++++***++++++++++++++++++++++++++********888#888######%%%##%%%%%%%%%%%%%%%%%%%%%%@%%@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@%%%%%@@%%##%@@@@@@@%%@%%@@@@@@@@%%%%%@@@%##%%%%%@@%%%%%%%%%%%%8==:--  .:                                                                                                                                              
                                                                                                                                                        .-++*8888#888############8####88##88#######888888888***+++=====--------------:::------::::--------------====++=====+***+****88###################%%%%%%%%%%%%%%##%%%%%%#################888888888888888888888*88************************+++****++++++++++++++++++++**********+**++*******88888888888888888#888*8*********+*++++++++++++++++++++++++++++++++++*******8*8#88#8########%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@%@@@@@%%%%%%@%%###@@@@@@@@@@@%%%%@@@@@@%%%%%@@@%###%%%%@@%%%%%%%%%%%%8=----                                                                                                                                                  
                                                                                                                                                       .-+**8888#########%###%%####8################88888#88***+++======-------------------:::-:::::-------------=====++===+***+***888##################%%###%%%%%##%%####%#####################888888###8888888888888888888888888888************************++++++++++++++++++********************8888888888888888888888888*******+**+++++++++++++++++++++++++++++**********88##88#########%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@%@@@@@%%%%%%%%%@@@@@@@@@@@%%%%%%@@%%##%@%%@@@@@@@%%%%%%%%@@@@%%%%@@@@%##%%%%@@@%%%%%%%%%%%#+----:                                                                                                                                                 
                                                                                                                                                       :+***888#####%%%%%%####%#####################888888888**++++====---------------------:---::::---------------===++++++***+**88888####%#########%#####%#%%####%#####################################88888888888888888888888888888888888888888888***************+++*+++++++++++*****************888888888888888888888888***********++++++++++++++++++++++++++++**********888#88##########%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@%@@%@%%%%%%%%%%@@@@@@@@@@@%%%%%@@%%%#%@@@@@@@@%%%%%%%%%%%@@@@%%@@@%@@%%##%%%%@@%%%%%%%%%%%#*==-..                                                                                                                                                 
                                                                                                                                                       -*88888######%%%%####%#######################88888888888*+++===---------------:---:::::::--::::--------------===++++++*8***888888########8################################################################8888888888888888888888888888888888888*********************************************88888888888##88888888888888************++++++++++++++++++++++++***++******8888####8###%##%%%%%%%%%%%%%%%%%%%%%%%%@@%@@@@@@@@@@%%%%##%%%%%%%@@@@@@@@@%%%%%%@%%%##%@@@@@@@%%%%%%%@%%%%%@@@%%@@@@@@@%%#%%%%@@%%%%%%%%%%%#8++=::.                                                                                                                                                
                                                                                                                                                     .:+888#######88#################################8888***8888**++===------------:::::::::::::::::::::------------====++++**88888888**8###8##88############8###############################################################888888888888888888888888888888***************88**************************888888888######8888888888888*********++++++++++++++++++++++*************8888#########%###%%%%%%%%%%%%%%%%%%%%%@%%%@@@@@@@%@%%#%%##%%%%%@@@@@@@@@@%%%%@@@%%%##%@@%@@@%%%%%%%%@%%%%%%@@@%@@%@@@@%%##%%%@@%%%%%%%#%%%#8++++=-:                                                                                                                                               
                                                                                                                                                     :=8##8##888888888##%%#############%%#############8888*+**888**++===--------::::::::::::::::::::::::::----------====+++++**88***88***88888#8888##########888#8888##########################################%%%%%%%%%%%%%%%%%%%%%%########88888888888888888**********+*****8888**********************88888888888#######8888888888********+++++++++++++++++++++**++***++*****88##########%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@%%%%#%%##%%%%#@@%@@@@@@@@%%%@@@%%%%%%%@%%@@%%%%%%#%@@%%%%%@@@%@@%@@@%%%##%%%@@@%%%%%%#%###*=-----:.                                                                                                                                              
                                                                                                                                                   .:=*8888888888*****888#######%########################88********++====---------:::::-::::::::::::::::::::-------=====+=+++*+*8***88*8888888888#88#8####888888888#8##############################%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####888888888888888*******++***************************88888888888888######8888888888*******++++++++++++++++++++++++++++++******8############%%%%%%%%%%%%%%%%%%%%%%%#%%%@@@@%@@@%%%%%%##%%%%#%@%%@@@@@@%%%%@@@%%%%%%%@%%%%%%@%%#%%%%%%%%%@@@@@@%@@@%%%%#%%%@@%%%%%%%%###8+=.:-:.:::                                                                                                                                             
                                                                                                                                                   .=*888888**++++++******8888#############################888*****+++===-------::::::---:::::::::::::::::::-------=====+===++*+****8888888888#88888888888888888888#88##########################%%%%%%%%%%%%%%%%%%%%##%%%####%############%%%%%%%%%%%###8888888888888*********************88**********88888888888888888888#888888888888****+++++++++++++++++++++++++++++++*******#%############%%%%%%%%%%%%%%%%%%%%##%%%%%%@%%%%%%%#%##%%%%%#%@%%@%@@@@@%%%@@@@%%%#%@@%%%%#%@%%%%%%%%%%%%%@@@@@@@@@%%%%#%%%@%%%%%%%%##%%8*+:. .:                                                                                                                                                
                                                                                                                                                   :=*888*****++++++++++++****88888#####################8888#888****+++==-------:::::::::::::::::::::::::::::------=========++******88888888888888888#88888888888################################%%%%%%%%%%%%#########88888888888888888############%%%%%%%##88888888888888*********************8888**88888888888888888888888888888888888****++++++++++++++++++++++++++++++*******8##############%%%%%%%%%%%%%%%%%%##%@%%%%%@%%%%%%%####%%%%%#%@%@@%@%%@%%@%%@@@@%##%@@%%%%#%%@%%%%%@@%%%%%@@@@@@@@%%%%%#%%%@%%%%%%%%%%##*--:.  .                                                                                                                                                
                                                                                                                                                    -+88**++==+========+++++++*****8888888################88888888***++==-------:::::::::::::::::::::::-------------=====++++++******888888888888888888888888888##############################%###%%%%########888**+++===============+++++***88888######%%%%%###888888888888**********************88888888888888888888888888888888888888******++++++++++++++++++++++++++++**+*****8###########%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%###%@%%%%@@%@@@%%%%#%@@%@@@%%##%@@%%%%%#%@%%%@@@@@%%%%@@@@@@@@@%%%%#%%%%%%%%%%%%###8+--                                                                                                                                                     
                                                                                                                                                    .=**+++++====++++++++++++++*******88888888888888######88888888***++==--------:::::::::::::::::::::::------------=====+++++++*****88888888888888888888888888888##888######################%%%%%%%######888*++++==+============-----------=====+++***888###%%%%###88888888************************8888888888888888888888888888888888888*****++++++++++++++++++++++++++++*********88#####%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%@%%%%%%%%@%%@%%%%@@@@@%%%##%@@%%%%%%%%%%%%%@@%%@@%%@@@@@@@%%%%%%%%%%%%%%%%%%##88+-::                                                                                                                                                    
                                                                                                                                                     :=*+=========++++++++++++**********888888888888888888888888888***++==--------:::::::::::::::::::::-------------====++++++++*****888888888888888888888888888####8#####################%%%%%%%##%%#8888*888*+=+++++=--===============-------=========++**888###%%%#888888888***********************88888888888888888888888888888888888*****+++++++++++++++++++++++++++*****+*****88##%%%###%%%%%%%%%%@@%%%%%%%%%%%%##%%%%%%%%%%%%%#%%%%%%%%%@%%@%%%%%@@@%@@@%%%%@@%%%%%%%%%%#%%%@@%%@@@%@@@@@@%%%%%%%%%%%%%%%%%%%##8*+-:                                                                                                                                                     
                                                                                                                                                     .-*+===========+++++++++************888888888888888888888888888***+===-------:::::::::::::::::::::--:----------====++++++*******888888888888888888888888888########################%%%%%%%%%#88##88*8**8#8*+=+++*+=---====+=============================++***88#%%%##88888************************88888888888888888888888888888***********++++++++++++++++++++++++++************88##%%%#%%%%%%%%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%#%%%%%%%%%@@@@%%%%@@@@%%%%%%%%@%%#%%%%%%%%%%%%@%%%@@@@%@@@@%%%%%%%%#%%%%%%%%%%%##*+=:.                                                                                                                                                     
                                                                                                                                                      :++=========+++++++++++************888888888888888888888888888***++==--------:::::::::::::::::::::::----------====++++++******8888888888888888888888888888#########################%%%%%%%#88*8###8*#*+*###+++**#*==---==++++==-----=======================+++*88#%%##8888****************************88888******888*********************+++++++++++++++++++++++++++************88#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@%%%@%%%%%%%%%%%%%%%%%%%%%@%%@@@@@@@@@@@%%%%%%%#%%%%%%%%%%%#8*=-.                                                                                                                                                      
                                                                                                                                                      .=+=========++++++++***************888888888888888888888888888*****+=--------::::::::::::::::::::::-----------===+++++++******888888888888888888888888888##########################%######%###88#%%#####8#%%####%%#8+==++**8+++=-----========================+++++*8###88********************************888******************************+++++++++++++++++++++**++**************88#%###%%%%%%%%%%%%%%%%%%%%#%%%#%%%%%%%#%%%%%%%%%%%%%%%%%@@@@@@@@%%%@@%%%%%%@%#%%%@@%%%%%%%%%%@@@@@@@@@@@@%%@%%%%%%%%%%%%%%%%##*-:                                                                                                                                                       
                                                                                                                                                       -+=======+++++++++**************8888888888888888888888888888888****+-------::::::::::::::::::::::::::--------==+++++++******8888888888888888888888888888#########################%##888####%%%%%#%%%%%%%%%%%%%%%%%%%###88#%#*88+==------===========+++++++++++++++++*8##88**************************************+++**************+*******+++++++++++++++++++++*******************8#%###%%%%%%%%%%%%%%%%%%%##%%####%%%%##%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@%%%%@%%%%%%%@@%%%%@%%%@@@@@@@@%%%@@@%%@@@%%%%%%%%%%%%##%%8=.                                                                                                                                                       
                                                                                                                                                        -=======+++++++++*********888888888888888##88#########8888888888**+=------::::::::::::::::::-:::::::--------===++++++******8888888888888888888888888888#########################888888888#######88################%%%####%%####888*+++++===========++++++++++++++++++*88888****************************+++*+++*********************++***+++++++++++++++++++**********************8####%%%%#%%%%%%%%%%%%%##%%###%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@%%%%%@%%#%%%%@@@%%@@%%%@@@@@@@@@%@@@@@@@@%%@%%%%%%%%%%##%#*=                                                                                                                                                        
                                                                                                                                                         :-=====++++++++**********88888888888####%%%%%%%%%%%%%%%####88888**=-:--:::::::::::::::::::::::::-----------===++++++*****8888888888888888888888888888888#####################88*88##########88###%%%%%%%%%%%%%%%%%##########%%%%##88888**++========+++++++++++++++++++**8888*************************+++++++++********+++++******+++++++++++++++++++++++++++*+++*****************8#%%%######%%%%%%%%%%#####8#%%##%%%%%%%%%%%%##%%%%%%%%@@@@%@@@%%%%%%@%%@@%#%%%%@@@@@@@%@@@@@@@@@@@@@@@@@@@%%%@%%%%%%%%%%%###+-                                                                                                                                                        
                                                                                                                                                          :-====++++++++********888888888###%%%%%%%%%%%%%%%%%%%%%%%%%###88*+=::::::::::::::::::::::::::::--------======++++++***88888888888888888888888888888888###########8#######88*****8888###88###%%%@@@@@@@@@%@@%%%%%%##88***88#####%%%#######88***+++===+++++++++*++++++++++***************************+++++++++++++++++++++********+++++++++++++++++++++++++++**********************#%%%#######%%%%%%%%%%%#####%%##%%%%%%%%%%%%%%%%%%%%%%@@@@%%@@@@@@@%@@%@@%#%%%@@@@@@@@%%@@@@@@@@%%@@@@@@@@%%%@%%%%%%%%%%%##8=:                                                                                                                                                        
                                                                                                                                                          .:-===+++++++++******88888888###%%###88888888#########%%%%%%%%%#8*=::::::::::::::::::::::::::::-------=======+++++****888888888888888888888888888888888888888888888888#88******88888888###%%@%%@%%%%@%%%%%%%%%%%%%##8*++++***888######%%%#####88**++++++++++*******+++++++++****************++++**+++++++++++++++++++++*******+++++++++++++++++++++++++++++++**++****++++++++****8##%%#######%%%%%%%#######%%%#8#%%%%%%%%%%#%%%%%%%%%%@@@%%%@@@@@@@@@@%@%%%%%%@@@@@@@@@@@@@@@@@@@@@@%%@@@@%%%@%%%%%%%%%%%##8=.                                                                                                                                                        
                                                                                                                                                            :-===+++++++*****88888888#####***+++++++++***8888######%%%%%%#8+-:::::::::::::::::::::::::::-------=======+++++*****88888888888888888888888888888888888888888888888888*88888888#8888###%%%%%%%%%%%%%%%%%##%%%#%%%%##8*+==++********88###%%%%%%##88888**************++++++++++++++*++++++*++++++++++++++++++++++++++++++**++++++++++++++++++++++++++++++++++++++++++++++++++******8#%##8######%##%%#######%%#88#%%%%%%%%#%##%%%%%%%%@@@%%%%@@@@@%%@@@%@@@%@%@@@@@@@@@@@@@@@@@@@@@@@%@@@@%%%%@%%%%%##%%%%%#8=:                                                                                                                                                        
                                                                                                                                                             .===++++********88##888##88*++++++++==+++++++****8888########8=::::::::::::::::::::::::::-------========++++*****888888888888888888888888*****888888888888********++*****88888888888#%%%%%%%%%%%%%%%%#+::-*#########8*===++*****+++**88###%%%%%%#####888888888********++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*******8##8888#################%#88#%%%%%%%%####%%%%%%%@@@@%%%@@@@@@@@@@@%%@@@%%@@@@@@@@@@@@@@@@@@@@@@@%@@@%%%%@@%%%%%###%%%%%8=:                                                                                                                                                        
                                                                                                                                                              -===++++**8***8*88###88***+++++++++==========+++++***88888##*:::::::::::::::::::::::::---------=======+++++*****888888888888888****************************++++++++++***88888888888#%%%%%%%%@%%%%%%%8=::-+8########8+=====+++++*******888#####%%%%%#######8888888******+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++******88##88888########%######%%##%%%%%%%%%%##%%%%%%%%%@@@%%%@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@%%%%@@@%%%%%###%%%%%#*=                                                                                                                                                        
                                                                                                                                                             ..:=++++++*888***88######8888******++++============++++******-:::::::::::::::::::::::-----------======++++++*****8888888888*************************++++++++====+++++***888888888**8##%%%%%%%@@@%@%%%%%%%%###8888888*+------=++++++********8888#####%%#######8888888*******++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++******88#8888##8######%#####%%##%%%%%%%%%%##%%%%%%%%@@@@%%%@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@%%%%###%#%%%%8+                                                                                                                                                        
                                                                                                                                                          .:. .:-=+++*****888##8*8###%%%%%%%%%%#####888**++++=========++=-:::::::::::::::::::::::-----------======+++++++*****888888***********++++*++++*****+*+++++========+++***88888888888++*8###%%%#%@%@@%@@@%%%%%%#888888888*=-------=++++++*****++++*8888############888888888******++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*******8888888888#####%####%%%#%%%%%%%%%%%##%%%%%%%@@@@@%%%@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%###%%%%%%8=                                                                                                                                                        
                                                                                                                                                           .:::.:-+*****888#8888###%%%%%%###%%#%%%%%%%%%####888**+++++=--:::::::::::::::::::::::::----------======+++++++*******888*****+++++++++++++++++++++++++=====--======+**88888888#8*+==+8########@%@@%%@@@%88%#8888888888*=--------======+++++++++++**8888888########8888888888*****++++++++++++++++++++++++++++++++++==========+===++++++++++++++++++++++++++++++++++++++++++++++********888**88888####%%%%%%#%%%%%%%%%%%%%#%%%%%%%%@@@@@%%@@@@%%%@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%###%%%%%%8-                                                                                                                                                        
                                                                                                                                                            .:-=-:-+*88888#####%%%%%%##888##%%%%%%%%%%%%%##%%####88*+=-::::::::::::::::::::::::::------------=====+++++++************+++++++++++++++++++++++++++==----------=+**8888###8888*+=-=8888#####%@@@%%@@@%##8888##88888*+=------------===++++++++++++******8888888##888888888*************+++++++++++++++++++==================+====++++++++++++++++++++++++++++++++++++++++++++++++********8*****8####%%%%%%#%%%%%%%%%%%%%%%%%%%%@@@@@@@%%@@@@%%@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@%%%%%###%%%%#%+.                                                                                                                                                        
                                                                                                                                                         .    .:-=+++*8888#####%%%##888##%%%@@@@@%%%%%%%#88****8888+=::::::::::::::::::::::::::::-----------======+++++++**********+++++++++++++======++++++=====------=---=+**88#####888**+=--=88888#####%%%%%%%@%%%%####8****++=-----------------=+++=++=+++********88888**888888888************+++++++++++++===============================+++++++++++++++++++++++++++++++++++++++++++++++++************8####%%%%%%%%%%%%#%%%%%%%%%%%%%%@@@@@%%%@@@@@%%@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@%%%%%#####%%%%%-                                                                                                                                                         
                                                                                                                                                            ..  :----++8###%#######88###%%%%%%%%%%%%%%%%%#8*+===-==:::::::::::::::::::::::::::::--------==========++++++**********+++++++++++++================--------==++**8#######888*++==---+8#88#######%%%%%%%######88*++==-------------------===--====++*****************8***************++++++++++++++++==========+=====================++++++++++++++++++++++++++++++++++++++++++++++++++++*******888###%%%%%%%%%##%%%%%%%%%%##%%%@@@@%%%%%@@@@@%%@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%@@@@@@@%%%%%######%%%8-.                                                                                                                                                        
                                                                                                                                                               ....:---=+**888####8#####%%%%%%%%%%%%%%%###*-------:::::::::::::::::::::::::::::----------=========+++++**********+++++++++++===============---------===+*888###888888**+++==----=*88888########%#########888*==--:-----------------=========+++*****++++**********************++++++++++++++++===================================++=====++======+++++++++++++++++++++++++++++++++++*******888####%%%%%%%%%%%%%%%%%%%###%%%@@@%%%%%@@@@%%%%@@%%%%@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@%%@@@@@@@%%%%%######%%%*-.                                                                                                                                                        
                                                                                                                                                        ...:::.......:::=*8##%%%%88###%%%%%%%%%%@@%%%%#88*-  .::::::::::::::::::::::::::::::::::---------=========+++++++*******+++++++++++=======-----------------=++*8###88*+=--=++*+++==------=+*8###################88*+==-----:-------------===============+++******************+++++++++++++++++++++++++===================================================++++++++++++++++++++++++++++++++++*******8888#####%%%%%%%%%%%%%%%%%###%%%@@@%%%%@@@@@@@@@%%@%%@@@@%%%@@%%@@@@@@@@@@@@@@@@@@%@@@@%@@@@%%%%%%######%%#*=.                                                                                                                                                        
                                                                                                                                                          ...:::-------=*88##%%#######%%#%%%@@@@@%%%%%#888*=-:::::::::::::::::::::::::::::::::::----------=======+++++++++++++++++++++++++++====-----------------===++*8#88*++==--==++++++==-------=+*88##############888*+=--:----------------------=======+++++++**********88*******+++++++++++++++++++++=============--===========================================++++++++++++++++++++++++++++++++*****8888######%%%%%%%%%%%%%%%%###%%%@@@%%%%@@@@@@@@@%@@%%@@@%%%%@%%%@@@@@@@@@@@@@@@@@%@@%@@%%@@@@%%%%######%%##*:.                                                                                                                                                        
                                                                                                                                                       ....::::----====-=*8##############%%%@@@@@%%@%%####*=-:::::::::::::::::::::::::::::::::-------------======+++++++++++++++++++++++++======-------------========++++***++===+++++++=+++++========+++**88888888***++==::::::-------===-------=====+++++++***++++********88888*****+++++++++++++++++===========-=======-------=======================================+++++++++++++++++++++++++++++*****8888######%%%%%%%%%%%%%%%##%%%%@@@@%%%@@@@@%%@@@%@%%@@@%%%%%@%%%@@@@@@@@@@%@@@@@@@%%%@@%%%@%@%%%%%%#%%%%%#8+:.                                                                                                                                                        
                                                                                                                                                        .:::::::----=====+++***8####888###%%@%%%%%@@@%%#88+-:::::::::::::::::::::::::::::::::-------------=======++++++++++++++++++++++++==========-----======--====----================+===+++++++++++++++++++++========++=-========-====+=--===++=++++++*++****************8888*****+++++++++++++++===========------===-----------====================================++++++++++++++++++++++++++++++***88888#####%#%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@%%%%@@@@%%%%%@%%@@@@@@@@@@@@@@%@@@@%%@@@@@@@@@%%%%%%%%@%%##8+:.                                                                                                                                                        
                                                                                                                                                              ::::.......-=-+8888###8**8##%%%@@@%%@@%%#88+-::::::::::::::::::::::::.:::::::::-------------=====+++++++++++++++++++++++++++=========----=======---------------====--======+==++++++++***+++++===++=======+++++++++==++==++++*+=+++++++++++**+++**************************+++++++++++=============--------------------=================================+++++++++++++++++++++++++++++++++****88#######%###%%%%%%%%%%%%%%%%%@@@@%@@@@@@@@@@@@%%@@@@@%%%@%@%%%@@@@@@@%@@@@@%%@@@@%@@@@@@@@@@%%%%%%%%%%%##8+:                                                                                                                                                         
                                                                                                                                                                     .:---=+****88#88***8##%%%%%%%%%###88+-::::::::::::::::::::::::::::::::::-------------=====+++++++++++++++++++++++++++===========-======-----------------===========+++++++++++++++++++++++**++++++++++++++++++==++++++*++++++++++++++++**************************++++++++++===============-------------------------=============================+====+++++++++++++++++++++++++*++****88#########%%%%%%%%%%%%%%%%%%@@@@%%@@@@@@%%%@@@@%@@@@@%%@@%@%%%@@@@@@@@@@%%%%%@@@@@@@@%%%%%%##88888#######8+-:                                                                                                                                                        
                                                                                                                                                           .....:::::---==---=+=*888*++**8####%%%%###888+-:::::::::::::::::::::::::::::::::::-----:--------====+++++++++++++++++++++++++++++================----------------=============+++=+++++++++++++++++*+++++++++++++++++==+====++++++++++++++++++++++++*************+++++++++++++++++++============------------------------------=============================+++=++++++++++++++++++++++++++++*****8#########%%%%%%%%%%%%%%%%%@@@@@%%@@@%%%%%%%%%%%@@@@@@%@%%%%%@@@@@@@@@@%%@@@%@@@%%%%#88**++=========++****+==:                                                                                                                                                       
                                                                                                                                                          .::::-:--====--:::..:=+++*+==+*8########88#88+-::::::::::::::::::::::::::::::::::::--------------=====++++++++++++++++++++++++++++++===============---------------=======++++++++++++++++++++++++++++++++++=========++=============+++++++++++++++*************++++++++++++++++++++========----===------------------------------==========================+==++++++++++++++++++++++++++++++++****88########%%%%%%%%%%%%%%%%%@@@@%%@@@@%%%%%%%%@@@@@@@@@@%%%%%%@@@@@%%@@%%%@@%%##88*++===-===============+++=---                                                                                                                                                       
                                                                                                                                                                      ... .. .-==++++=-+**8#######888*+-:::::::::::::::::::::::::::::::::::::::::----------=====+++++++++++++++++++++++++++++++===============---------------====++===+++++++++++++======++++++==============================+++++++++++++++*****+++**++++++++++++====+++============--=====------------------------------===========================+===+++++++++++++++++++++++++++++*****888#######%%%%#%%%%%%%%%%%%@@@%%%@@@%%%%%%%@@@@@@@@@@@@%@@%%@@@@@%%%%%%###8**++=====----===-======+====+++++=-::                                                                                                                                                     
                                                                                                                                                                          ..::::-==++===+8888888****+=-:::::::::::::::::::::::::::::::::::::::::----------======+++++++++++++++++++++++++++===================-------------===========+++=++++++++++++=======++=============================++++++++++++++++++++++++++++++++++=+++=================---------------------------------------=================================++++++++++++++++++++++++********8888######%%%%%%%%%%%%%%@@@@@%%%%@@@%%%%%%%@@@@@@@@@@%%%%%%@@@%%%%%%##88**++=======-----===-=====++++++++++++++=-.                                                                                                                                                   
                                                                                                                                                                        .::::::-===+****88****+++++=-:::::::::::::::::::::::::::::::::::::::::::---------=======+++++++++++++++++++++++++++==============+====-----------------========++=+++=++++*+++++++++===++=++++=========+++++=====+++++++++++++++++++++++++++++++++++++++++=================---------------------------------------====================================+++++++++++++++++++++********88888######%%%%%%%%%%%%%%@@@%%%%%%@%%%%%%%@@@@@@@%@@%%%@@%%%%%%%%%%#88**++======-====--======++********++++++++++=-:                                                                                                                                                 
                                                                                                                                                                         .-=+***888888888**++++++++=-:::::::::::::::::::::::::::::::.::::::::::----------=======++++++++++++++++++++++++++++====================-----------------==========+++++++++++++++++++++++===+++++=++++===================+++++++++++++++++++++++++++++===================----------------------------------------==========================+=+++=++++++++++++++++++++++++++++*****88888######%%%%%%%%%%%%%%@@@%%%@@%%%%%%%%@@@@@@@%%@@%%@@@@%%%%%%%%#8*++=========-==--==++++*8888##8888888**********+-.                                                                                                                                               
                                                                                                                                                                       .-=+++++=***+++***+++++++++=-::::::::::::::::::::::::::::::::::::::::::----------=======++++++++++++++++++++++++++++++++========++=======-------------------=============+++++++++++==++++++++++++===============+++====++++++++++++++++++++++++++++++==================-----------------------------------------===========================++++++++++++++++++++++++++++++++++++****88888#######%%%%%%%#%%%%%%%%%%%@@%%%%%%%@%@@@@@%@@@@@@@@@@%%%%%##88*+================+*88888########8888#888*********=.                                                                                                                                              
                                                                                                                                                                       :--::---:=+===+++++++++++++-:::::::::::::::::::::::::::::::::::::::::-----------=======+++++++++++++++++++++++++++++++++=================---------------------=-----=============++++++=================================+++++++++++++++++++++=====================--------------------------------------------------=======================+++++++++++++++++=+++++++++++++++++++****88888####%%%%%%%%%%%%%%%%%%%%%@@%@%%%%%%%@@@@@@%@@@@@@@@@@%%%%#88**+=========+====++*8888888888888888888888888********=:                                                                                                                                             
                                                                                                                                                                     ::-:  :::  -=====++++++++++==:::::::::::::::::::::::::::::::::::::::::------------======++++++++++++++++++++++++++++++++++++================-----------------------------------====-===++=+=================================++=============================----=-=----------------------------------------------------=======================++++++++++++++++++++++++++++++++++++*****88888####%%%%%%%%%%%@@%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@%%%##88*++=========++++**8888888888888888888888888888888******+-:                                                                                                                                           
                                                                                                                                                                   ..::: .:..   :================-::::::::::::::::::::::::::::::::::::::-------------=======+++++++++++++++++++++++++++++++++++++================--------:::-----------------------------------=======================================================--=====-------------------------------------------------------------=======================++++++++++++++++++++++++++++++++++*********8888####%%%%%%%%%%%%@%%@%%%@@%%%%%@@%%%%@@%%@@@@@@@@@@%%%##8***+++========+**88888888888888888888888888888888888888****+=.                                                                                                                                          
                                                                                                                                                                     ..  ...    .-========++++++=-::::::::::::::::::::::::::::::::::::::------------=======++++++++++++++++++++++++++++++++++++++================----------::-----:::::---------:----------------------------------=====--===========---====---=======----==--------------------------------------------------------------======================+++++++++++++++++++++++++++++++++*********88888####%%%%%%%%%%%@%%%%%%%%%%%%@@%%%%%%%%%@@@@@@@@%%%%%##88***++++++++++++*88##8888888888888888888888888888888888888*++*+-.                                                                                                                                         
                                                                                                                                                                                 :======++++++++=-::::::::::::::::::::::::::::::::::::-------------========++++++++++++++++++++++++++++++++++++++++=============------------:::::::::::-:---------------::::---::::-----------------------------------------------===--------------------------------------------===--------------------========================++++++++++++++++++++++++++++++++**********888######%%%%@@@%%%%@%%%%%%%%%%%%@%%%%%%%%@@@@@@@%%%%%####88***++++++++++**8###88888888888888888888888888888888888888*++++++-..                                                                                                                                       
                                                                                                                                                                                 :-====++++=++++=::::::::::::::::::::::::::::::::::::::-----------=========++++++++++++++++++++++++++++++++++++++++=============----------:-::::::::::::::::--::-::------:::::::::::::::::::::::::::----------------------------------------------------------------------------------------------------======================+++++++++++++++++++++++++++++++++**********888#####%%%@@@@@@%%%%%%%%@@%%%%%%@@%%%%%%%@@@@@%%%%%###88888**+++++++++***8###8888888888888888888888888888888888888888*+===++=:.                                                                                                                                       
                                                                                                                                                                                 :-=========++++=:::::::::::::::::::::::::::::::::::---------------=======++++++++++++++++++++++++**+++++++++++++++=============-----------:::::::::::::::::-::::::::-::::::::::::::::::::::::::::::--::::----------------------------------------------------:::::--:::------:-------------------------====================++++++++++++++++++++++++++*****+++*********888####%%%%%@@@@@@@%%%%%%@@@@%%%%%@%%%%%%%%%%@%%%%%%####88888***+++++++***8#####888888888888888888888888888888888888888*+==+++*+-.                                                                                                                                       
                                                                                                                                                                                 ::--===========-::::::::::::::::::::::::::::::::::---------------========+=+++++++++++++++++++++++++++++++++++++++=============-----------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------::---------------------::-----------------:::::::::-::::--:--::------------------------===================++++++++++++++++++++++++****+++************888###%%%%%@@@%@@%%%%%%%@@@@%%%%@@@%%%%%%%%%@@@%%###888888888****++++++**88#####888888888888**88888888888888888888888888*++==+++*=.                                                                                                                                       
                                                                                                                                                                                 ::--===========-::::::::::::::::::::::::::::::::----------------========++++++++++++++++++++++++++++++++++++++++++==============----------::::::::::::::::::::::::::::::::::::-::::::::::::::::::::::::::::::::::::------:-----------::::::::::::::::::::::::::::-:::::-------------------------==-------===============+++++++++++++++++++++++++++++++++*********888888##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88888888888******++***888##888888888888*8***88*8888888888888888888888***+===++*=:                                                                                                                                       
                                                                                                                                                                                 :----==========-::::::::::::::::::::::::::::::-------------===========++++++++++++++++++++++++++++++++++++++++++++==============------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------:::::::-----------:::::::::::::::::::::::::::::::-----:::---------------------------===============+=++++++++++++++++++++++++++***++************88####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####8888888888888**********888888888888888******************8888888888888****++===++++-                                                                                                                                       
                                                                                                                                                                                .:----======-==--:::::::::::::::::::::::::::::--:::---------===========+++++++++++++++++++++++++++++++++++++++++++++============------------::::::::::::::::::::::::::::::::::::::::::::---------::-:::::::-::::-----------::------:--:::::::::::::::::::::::::::::::::::::::------------------------==================++++++++++++++++++++++++*+******************8888####%%%%%%%%%%%%%%%%%%%%%%%%%%%%#############8888888888888888********8888888888888888*********************88888888*****++=====+++=                                                                                                                                       
                                                                                                                                                                                 ::-------------::::::::::::::::::::::::::::::------------==========++++++++++++++++++++++++++++++++++++++++++++++==============----------::::::::::::::::::::::::::::::::::::::::::::::::--------:::::::::-::::------:-::::::::::::::::--:::::::::::::::::::::::::::::-----:---------------------===================+++++++++++++++++++++*********************8888888######%%%%%%%%%%%%%%%%%%%%%%%%###############88888888888888888*****888888888888888888********+++++++++++*************+++++=====++++.                                                                                                                                      
                                                                                                                                                                                ::::------------:::::::::::::::::::::::::::::-------------==========+++++++++++++++++++++++++++++++++++++++++++++++============----------:::::::::::::::::::::::::::::::::::::::::::::::::-----:::::::::::::::::-:::::::::-:----:::::::---::::::::::::::::::::::::::::::--::-------=------------===================++++++++++++++++++************************888888########%%%%%%%%%%%%%%%%%%%%%%%%#########8####88888888888888888888****888888888888888*********+++====+++++++*********++++++====-====++.                                                                                                                                      
                                                                                                                                                                                :::------------:::::::::::::::::::::::::::::---------------=========+++++++++++***++++*++*++++++++++++++++++++++============-=-----------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::::::::::::::::::::::::----::::::::::::::::::::::::----:----:--------------------====================++++++++++++****************************8888888########%%%%%####%%%%%%%%%%%%%%###88888888888888888888888888888888*88888888888888888********++=========+++++*******++++++=====----==++.                                                                                                                                      
                                                                                                                                                                               .:::-----------::::::::::::::::::::::::-::::---------------==========++++++++++****+++++*****+++++++++++++++++++++++============-----------:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---------:::::::----------::::--------::--:---::::::-::::::-----------------------------====================++++++++++++********************8*******8888888###################%%%%%###########8888888888888888888888888888888888888888888888**********++===-----====+++++******+++++======----==++.                                                                                                                                      
                                                                                                                                                                               .:::----------::::::::::::::::::::::::::------------------===========+++++++++****************++++++++++++++++++++==========--------------:::::::::::::::::::::::::::::::-::::::::::::::::::::::-:::::::::---:::--:::::---:::::::::::----::::-----------:::::::::::------------------------------==============++++++++++++++*********************8*******888888888###################%%%############8888888888888888888888888888888888###8888************+++===---------====+++*****+++++++=====-----==++.                                                                                                                                      
                                                                                                                                                                              .::::---------:::::::::::::::::::::::::::-::--------------===========+++++++++******************++++++++++++++++==+============-------------:--:::::::::::::::::::::::::--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::---::---::::----:::-----------====-------------=-----==============++++++++++++***********************888888888888888888888###############################888888888888888888888888888888888#%####88********++++===-----------====++++******++++++====------=++*.                                                                                                                                      
                                                                                                                                                                             .:::::--:::---::::::::::::::::::::::::::::::----------------=========+++++++++*********************+++++++++++++=================-------------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::::::::::::----::::::::::-::::----:::::-------------------=====--------===----================++++++++++++*********************888888888888888888888888888################88######88888888888888888888888888888888888#%%%%%###88****+++===--------------====++++*******++++====------==++*                                                                                                                                       
                                                                                                                                                                            .::::--::::::::::::::::::::::::::::::::::::------------------==========++++++++********************++++++++++++==================------------::::::::::::::::::::::::::::::::::-----:::::::::::::::::-::::::::::::::::::::::::::---------:::::::--:--------------------------------------======================++++++++++++++************8888****8888888888888888888888888888#8#########88888888888888888888888888888888888888888888888#%####%####88***++==-----------------===++++*******+++====----:--=++*=                                                                                                                                       
                                                                                                                                                                            .::::------::::::::::::::::::::.....:::::::------------------========++++++++*********************++++++++++++++===================---------::::::::::::::::::.::::::::::::::--::---:::::::::----:::::::::::::::::::::::::::::-----------:::::::---------------------------------------==============++=======+++++++++++++**************888888*8888888888888888888888888888888888888##88888888888888888888888888888888888888888888888##############88**++==----------------==++++********+++===-----:-==+**:                                                                                                                                       
                                                                                                                                                                            :::::-:---::::::::-:::::::::::.:::..:::::::::----------------=======++++++++++********************+++++++++++++++================------------::::::::::::..:::::::::::::::::--::::::::::----::::-:::::::::::::--::::::----::::--::::::-----:-------------------------------------------============++++====+==++++++++++++***********88***888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888#################88**++==---------------===++*********+++==-------==++*+.                                                                                                                                       
                                                                                                                                                                           .::----:--:::::-:----::::::::::::::::::::::::::---------------=======++++++++**********************++++++++++++++++===============------------:::::::::::::::::::::::::::::::::::::::--::::::::::::-::----:::::::::::---:::::::--------------------------------------------------======-==================+++++++++++++*********8**8*8888*888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888##################88**++====-------------===++*********+++==-------==+**=                                                                                                                                        
                                                                                                                                                                           ::::-----:::::---:::-:::::::.......::::::::::::---------------=======+++++++**********************+++++++++++++++++===============------------::::::::::..::::::::::::-::::::--:--:::::::::::---:::-::-:-::-----::::-------::::-----------------------------------------------=========================+++++++++++++++********888**888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888###################888*++======-----------====++********++==-:-----==++*=                                                                                                                                         
                                                                                                                                                                          .:::----::::---:---::::::::::.....::::::::::-::----------------=======+++++++**********************+++++++++++++++++===========-----------------:::::::::::::::::::..:::::::::::::-::::::::::::::::::::-:::::::::------::-------------------------------------------------------============+==========+++++++++++++++********888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888###################888*++=====--------------===++******+++=--------==+*-.                                                                                                                                         
                                                                                                                                                                         .:-::---::::----:::-:::::::::.....::::::::::--:----------------========+++++++++++******+++++******++++++++++++++++++============-------------::::::::::::::::::::::::::::::::::---::-::::::::::::::::::::-:::::::::::-------------------------------------------------------=---=====================+++++++++++++++++*******888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888****888888################88888**++=====---------------==++******+++=--------=+*-                                                                                                                                           
                                                                                                                                                                         .::::--:::::::::::::::::::...:.....:::::::::::-----------------=======++++++++++++++++++++++++++++++++++++++++++++++++++++=======-----------:::::::::::::::::::::::...:::::::::::::::::::::::::::::::::-:::---------------------------------------------------------------------=====================+++++++++++++++++********88888888888888888888888888888888888888888888888888888888888888888888888888888888888888************888888####88888#8888888888**++======--------------==++******++==----:--=++-.                                                                                                                                           
                                                                                                                                                                         ::-:--::::----:::::::::::.............:::::----------------============++++++++++++++++++++++++++++++++++++++++++++++++++++=====-------------:::::::::::::::...::::::.:::::::::::--:::::::::::::::::::::--::::-------------------------------------------===----------------========================++++++++++++++++*******88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888******+++++**888888888888888888888888***++======--------------===+******++=---::::-=+-                                                                                                                                             
                                                                                                                                                                         ::-:::::----:::::::::::::............:::::::::-------------=============+++++++++++++++++++++++++++++++++++++++++++++++++++======-------------:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-------------------------------------------==------========================+++++++++++++++++++*******888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******+++++++**88888888888888888888888****++=====---------------===+*****++==---:::-==:                                                                                                                                              
                                                                                                                                                                         ::::::::----:::::::::::::...... ....::::::::----------------==========++++++++++++++++++++++=+++++++++++++++++++******++++========-----------:-::::::::::..:::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------------------------------============================+++++++++++++++++*********888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******+++++++++**88888888888888888888*****++++====--------::::----===++****++=---::--==-                                                                                                                                               
                                                                                                                                                                         ::-::::-----:::::::::::::::......::::::--:------------------=========++==++++++++++++++++++++++++++++++++++++++*********++++=====-----------:::::::::::::::::::..::....::::::...::::::::::::::::::::::::::::::::::--------------:-::-------------------------======----====================+++++++++*+++++++++********8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888******+++++++++++**888888888888888*********+++++====-------::::::--====+*****+==--::--===.                                                                                                                                               
                                                                                                                                                                         ::-:::----------:::::::::::::.:::::::--------------------==========++++++++++++++++++++++=++++====+++++++++++++++*********++++===----------:::::::::::::::::::::::::::::::::::::::::::.::::::::.::::::::::::::::::----------------::--------------------------------======================++++++++++++++++++++*******88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*****++++++====+++*88888888**88*********++++++++===-------:::::::--===++*****+==-::--==:                                                                                                                                                 
                                                                                                                                                                         ::-::------------:::::--:::::::::------------------==============+++++==+++++++++++++++==++=++====++++++++++++++++*********+++====-------:::::::::::::::::::::::::..:::::.:::::::::::::::::::::::::::::::::::::::::::--:::::---::-:---------------------------------======================+++++++++++++++++++*********88888888888888888888888888888888888888888888888888888888888888888888888888888888888888*****++++++=======++*8888**88************++=======------------:::::--==++******+=--:--=-:                                                                                                                                                  
                                                                                                                                                                         :::::---------:::-::::---::------------===================+==++++++++++++++++++++++++++++++==++==++++++++++++++++++*********+++=====-------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::::-----------------------------------------------====================++++++++++++++++++********88888888888888888888888888888888888888888888888888888888888888*****888888888888888888*******+++++=========++*8888****************+======-------:::--::::::--===++***88*+=::-==-                                                                                                                                                    
                                                                                                                                                                         :::----------------------------------==============+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*********+++=====-------::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::::::::::::::------:::-------------------------------------======================+++++++++++++++*********88888888888888888888888888888888888888888888888888888****88888**********888888888**8888****+++++++========+++*888888**************+++===-------:::::-::::::::--==+***88*+=-----.                                                                                                                                                     
                                                                                                                                                                         .:------------------------------==============++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*********++++=====-----:::::::::::::::::::::::::.:::::::::::::::::::::::::::::::::::::-::::::::::::::::::::::::::-----------------=====------===--====================++++++++++++++*********888888888888888888888888888888888888888888888***88888*************************************+++++++++++==+++++**88888888*********++++++===-----:::::::::::::::::--=+*88888*=-----                                                                                                                                                       
                                                                                                                                                                         .::----------------==------===============+++++++++++++++**********+++++++++++++++*++**+++++++++++++++++++++++++++*******8****++++====-----:::::::::::::::::::.::::::::::::::::-::::::::::::::::::::::::::::::::::::--::::::::::::::::-:-------------====--------==-===================++++++++++++++++********8888888888888888888888888888888888888888888**88********************************************+++++++++++++++****8888888888******+++++++===------:::::::::::::::::--==+*8888*+---=-.                                                                                                                                                       
                                                                                                                                                                          ::----------====-=======================++++++++++*************************************++++++++++++++++++++++++++********88**++++====------:::::::::::::::::::::::::::::::::--:::::::::::::::::::::::::::::::::::::::::---::------:------------------=-------------======================++++++++++++++*******8888888888888888888888888888888888888888888**************8******************************+++++++===++++****88888888888888*****++++======-----:::::::::::::::::::-==+*8888*+=-==:                                                                                                                                                         
                                                                                                                                                                          ::---------===========================+++++++++++*****************************************+++++*+++++++++****************888**+++======---:::::::::::::::::::::::::::::::::::::-::::::::::::::::::::::::::::::::::::::::--::--------------------------------------===================++++++++++++++++*********8888888888888888888888888888888888888888888******8************************************++++++=====+++**888888888888888888*****++++=====----::::::::::::::::::::--=+*88888+===-.                                                                                                                                                          
                                                                                                                                                                          :::--------=======================++++++++++++++*************************************************************************8888**+++====--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------------------------====================+====++++++++++***********888888888888888888888888888888888888888***8******************************************++++++=====++**88888888888888888888*****++=====-----::::::-:::::::::::::--=+*88888*+==:                                                                                                                                                            
                                                                                                                                                                          .::---=---==========++++++++++++++++++++++++++++**************************88*****88*************************************888888**+++==---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::::::---------------------------------------=======================+++++++++++************8888888888888888888888888888888888888***********************************************+++++======+***88888888888888888888******++===-----::::::---::::::::::::--=+*88888*+=-.                                                                                                                                                             
                                                                                                                                                                          .::--:--=--=====+++++++++++++++++++++++++++++++***********88888###%%%%%%%%%@@@@@@@@@%%%%%%%##8888***********8**8888*****888888**++==---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------=--------====================+++++++++++************888888888888888888888888888888888**************************************************+++++=====+**888888888888888888888********++==---::::::::------::::::::--==+*88888*+=.                                                                                                                                                               
                                                                                                                                                                           .::--:-----===++++++++++++++++++++++++++++**+********88##%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@%%%##8888*888888*888888888*88888888*+===--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---------------------------------============================+++++++++++***********888888888888888888888888888***88****************************************************++++====++**888888888888888888888888******++==---::::----------::::::---==+*8888**+=.                                                                                                                                                                
                                                                                                                                                                            ::----:::--===+++***+***************************88#%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@%%%%%%%###8888888888888888888888888888*+=---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----:----------------------------------============================++++++++++***********8888888888888888888888888***********************************************************+++====++*88888888888888888888888888888***++===----------------:::::--==++*8888*+=:.                                                                                                                                                                 
                                                                                                                                                                            .:--::--:::--=++++****************************8#%%%%%%%%%%%%%%%##########%%%%%%%%%%%%%%%%%%%#####8888888888888888888888888888*+=---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::::::::::---------------------------------------====================++====+++++++++++++***********888888888888888888*****************************************************************++++++++*88888888888888888888888888******++++====----------::::::---==++*8888**+-.                                                                                                                                                                   
                                                                                                                                                                             .:--:--::::::-==++**************************88##%%%%%%##########################%%%%%%%%#########8888888888888888888###8888**+==-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------------------------------------------===================++++++++++++++++++************88888888888888888******************************************************************++===++**888888888888888888****++==------==========------::------===++**8888*+=:                                                                                                                                                                     
                                                                                                                                                                              ::::-:::::::::--==+**********************88888##############88######8888888888#################88888888888888#########88888*+=--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::::::::::::-------------------------------------====================+++++++++++++++++*************88******8888888*******************************************************************++++++********+++++*******++===------------==========--------====++++*88888**=:                                                                                                                                                                       
                                                                                                                                                                             .::-::::::::-:---:---==++*******************8888888888888888888888888888888888888888888888888888#8888################888888**+=-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------------------=======================+++++++++++++++++**********************************************************************************************++++******+===-----------------------=======================+++*****88888**+:.                                                                                                                                                                        
                                                                                                                                                                              .:-:-:::::::-::::::::::--==+++***************888888888888888888888888888888888888888888###########################8888888**+=--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::---::::-------:::---------------------------------------=======================+++++++++++++++++++*******************************************************************************************++*******+==------::::::::::::------=======+++++++++++++********888888**+++                                                                                                                                                                           
                                                                                                                                                                             ..:-:::::::::::-----::-------=++++++++*********8888888888888888888888888888888888888888#########################8888888888*+=--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::::--------:------------------------------------==---========================++++++++++++++++++****************************************************************************************************++==-------:::::::::-----====+++++++*****************888****++++=-                                                                                                                                                                            
                                                                                                                                                                                ::::::::::::--------------:-=+++++++++*******8888888888888888888888888888888888888######################88888888888888*+==--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::::--------------------------------------------------==========================+++++++++++++++++********************************************************************************888***********8***++===------------------=====+++++*********88888**8*******++======:                                                                                                                                                                             
                                                                                                                                                                               .::::::::::-------------------=+++++**++*******888888888888888888888888888888888888##################8888888888888****+==--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::::::----------------------------------------------============================++++++++++++++++++********************************************************************************88***************++==-----------------======+++********8**8888888******+===---===:                                                                                                                                                                               
                                                                                                                                                                               .::::::::::-------------------=+++++***********88888888888888888888888888888888######888####8888888888888888888***+++==---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------------------------==============================++++++++++++++++**++*******************************************8*******************************888888************+++==------------------=====+++********8888888888***++==------===.                                                                                                                                                                                
                                                                                                                                                                               .::::::::::-------------------=+++++********8888888888888888888888888888888888888##88888##88888888888888888*****++===----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------------------------------==--=============================+++++++++++++++++++******************************************888********88***8888888************888************++==-------------------=======++********8***88****++==-------==-:                                                                                                                                                                                  
                                                                                                                                                                                ::::::::::-------------------=+++++++*****88888888888888888888888888888888888888####888##88888888888888****+++===----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::-:::---::::::-----------------------------------------------==============================+++++++++++++++++*++++++*************************************88********888888888888888*********8888**********+===----:-----------====++++++++****************+++==------====:                                                                                                                                                                                    
                                                                                                                                                                                ::::::::-:-------------------==++++++*****8888888888888888888888888888888888888888#888888888888888*****+++====------::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------------------------------------------------===============================++++=++++++++++++++++++++****++****************************************88888888888**888**********************+=----::::----------===+++******+********+++++++====-----====--.                                                                                                                                                                                     
                                                                                                                                                                                :::::::----------------------===+++++++***8888888888888888888888888888888888888888888888888*******++++======----::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------:-----------------------------------=================================+===++++++++++++++++++++***++*****************************************888888888888888*****8*************88*+=---::::::::---------=====++++++++++++++=====-=--------=====                                                                                                                                                                                         
                                                                                                                                                                                :::::::-----------------------==+++++******8888888888888888888888888888888888888888888*****+++++++=======------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-------------------------------------------------------------==--=============================+++++++++++++++++++*+++************************************************8888888888888888****88*****8****888*++----:::--:---------------==============-----------========-                                                                                                                                                                                          
                                                                                                                                                                                .::::::-----------------------====+++******888888888888888888888888888888888**********++++++========--------::::::---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-------------------------------------------=---------------==================================+++==+++++++++++++*+++++*+*****+*******++****************************8888888888888888888888888****88*888***+=------:::----------------------------------------=====::                                                                                                                                                                                             
                                                                                                                                                                                .::::---------------------------==++++*****88888888888888888888888888888888*******++++++==========-----------::::::::-:-:::::::::::::::::::::::::::::::::::::::::::::::::::::::---------------------------------------------------------=========================================+++++++++++++++*++++**++++++++++++++++*************************888888888888888888888888888888888888888**+=------------------------------------------------=====-                                                                                                                                                                                               
                                                                                                                                                                                .::::---------------------------===++++*****8888888888888888888888888888******++++++========------------------::--:::-:-:::::-:::::::::::::::::::::::::::::---::::::::::::::::---------------------------------------------------================================================++++++++++++++++++++++++++++***++++****************************888888888888888888888888888888888888888*+==-----------------------------------------------===+=.                                                                                                                                                                                                
                                                                                                                                                                                .::------------------------------===++++****8*88888888888888888888888*******++++++=========----------------------:::::::::::-::::::::::::------:::---::::---------------:----------------------------------------------------------===--========================================+++++++++++++++++++++++++++++++*+++++***********************8***8888888888888888888888888888888888*8888*+==---------------------------------------------===++=.                                                                                                                                                                                                 
                                                                                                                                                                                .:--------------------------------=====++++****88888888888888888********+++++=====+===-====------------------------::::::------:--::----------:::--:::::-------==-------------------------------------------------------------===-=====-=====================================+=++++++++++++++++++++++++++++++++++++++***************************8888888888888888888888888888888888*8##8**+==------------------------------------------===+++=:                                                                                                                                                                                                  
                                                                                                                                                                                 :-::-----------------------------=======++++********************++++++++++==================-------------------------::::----------------------:::------------=-------------------------------------------------------------=---=============================================+++++++++++++++++++++++++++++++++++++++**************************888888888888888888888888888888888888####8**+===-------------------------------------===++++-.                                                                                                                                                                                                    
                                                                                                                                                                                 :----------------------------------========+++++++++++++++++++++++=+=============-==========----==-----------------------------------------------:::------------------------------------------------------------------------===============================================++++**++++++++++++++++++++++++++++++++++++*************************88888888888888888888888888888888**8#######8*++=======---------------------------======+++:.                                                                                                                                                                                                      
                                                                                                                                                                                 :---------------------------------------========+++=======+==================---=======--===----=====-----------------=====------------------------===---------------------------------------------------------------------==================================================+++*+++++++++++++++++++++++++++++++++++**********************88888888888888888888888888888888888**88#########8**+++================================++++=.                                                                                                                                                                                                         
                                                                                                                                                                                 :-----------------------------------------==-=============================-----==------=====---==--========-----------==-----------===-------------=-----=========----------------------------------------------------===================================================++==++++++++++++++++++++++++++++++++++++++************************8888888888888888888888888888888888**88############88**+++=======================+++++=--:                                                                                                                                                                                                           
                                                                                                                                                                                 :---------------------------------------------------====---=========--------------------==----=============----------==-----------=-----------==-===================--------------------------------------====-----======================================================++==++++=++++++++++++++++++++++++++++++++++++******************888888888888888888888888888888888888*88#################88*****+++++++++++++++++++**=:.                                                                                                                                                                                                                
                                                                                                                                                                                 :-------------------------------------------------------------==----------------------------=====---=====--------=======--==--=====-=============================-----------------------------------------================================================================+=++++====+++++++++++++++++++++++++++++**********************888888888888888888888888888888888888*888####################8888888888**********++++-                                                                                                                                                                                                                   
                                                                                                                                                                                 .-------------------------------------------------------------------------:----------------=------==--------==-=======-------==============================+++==========-------------------==------------================================================================+++++++++++++++++++++++++++++++++++++++**********************88888888888888888888888888888888888888888##############888888888888###*=-:..  ..                                                                                                                                                                                                                         
                                                                                                                                                                                 .:--------==------------------------------------------------------------::-----------------------==----------------==============================+++++++====++++++===========-=-----------========--------================================================================++++++++++++++++++++++*+++++++++++++++**********************8888888888888888888888888888888888*8888888###########888888888888888+.                                                                                                                                                                                                                                   
                                                                                                                                                                                  :-----======---------------------------------------------------------::::::::-------------------------===-----------=====================++++++++++++++++++++++=++++===========--------===============================================================================+++++++++++++++++++++++++++++++++++++++++********************8888888888888888888888888888888888888888888###########88888888888888*:                                                                                                                                                                                                                                     
                                                                                                                                                                                  .-------====----------------------------------:::-------------------::::::::::------------------------------=============================++++++++++++++++++++++++++++========-------==========+++====================================================================++++++++++++++++++++++++++++++++++++++++++******+************8888888888888888888888888888888888888*888888888888888888888888888888*:                                                                                                                                                                                                                                      
                                                                                                                                                                                  .---==========--------------------------------:::::::::----------:::::::::::::::--------------------------===============================+++++++++++++++*****++++++++++==================+++++++======================================================================+++++++++++++++++++++++++++++++++++++++********+***********888888888888888888888888888888888888888888888888888888888888888888888+                                                                                                                                                                                                                                       
                                                                                                                                                                                   :--=================----------------------------:::::::::----:::::::--:::-:------------------------------------==================+++====+++++++++++****************+++++=================++++============================================++++++======================++++++++++++++++++++++++++++++**+++++++*+****************88888888888888888888888888888888888888888888888888888888888888888888888+.                                                                                                                                                                                                                                      
                                                                                                                                                                                   :--===========+==-===----------------------------::::::::--::::::::-------------===-==---------------------=====================+==++++++++++++++***********88********++++++===+==========+==============================================+++++++==============++===++++++++++++++++++++++++++++**************+****************88888888888888888888888888888888888888888888888888888888888888888888888=.                                                                                                                                                                                                                                      
                                                                                                                                                                                    :-==========+++=====-------------------------------::::::::::--------==============++=======================================++==+++++++++++++*********8888888888888888***++++++=====================================================++++++++++++++==========++++===+++++++++++++++++++++++++++++*****************************88888888888888888888888888888888888888888888888888888888888888888888888.                                                                                                                                                                                                                                       
                                                                                                                                                                                    :--=======++++++++==---------=================-------------------====++++++++++++****+++++++++++++++++++++++++++++++++++++++++++++++++++++++********888888888888888888888***++++==================================================+++++++++++++++++++======+====+====++++++++++++++++++++++++++*****************************88888888888888888888888888888888888888888888888888888888888888888888888-.                                                                                                                                                                                                                                       
                                                                                                                                                                                    .-=======+++++*****+==--=-=======================================+++++++++++++++*****************************************************************88888888888#############888*+++================================================+++++++++++++++++++++======+====+++++++++++++++++++++++++++++*************************8888**8888888888888888888888888888888888888888888888888888888888888888888888=                                                                                                                                                                                                                                         
                                                                                                                                                                                    .-======++++++****888+=-=====+++++++++++++++++++++++++++++++++++++********++**************88888888888888888888888888888888888888888888888888888888888888######%%%%%%%%%%%%##8*++===============================================++++++++++++++++++++++++==++++++++++++++++++++++++++++++++++++*****************************88888888888888888888888888888888888888888888888888888888888888888888888+.                                                                                                                                                                                                                                         
                                                                                                                                                                                     .-=====++++++***88888*===++++++++++++++++++++++++++++++++++++**************************88888888888888##############################################%%%%%%%%%%%%%%%%%%%#####8*+++===========================================+=+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********************8888888888**8888888888888888888888888888888888888888888888888888888888888888=                                                                                                                                                                                                                                          
                                                                                                                                                                                      :-=====+++++****8888#8***********+++++++++++**************************************8888888888############################%%###%#%%%%%%%%%%%%%%####%%%%%%%%%%%####88888*****+++++=============================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**++**************************888888888888888888888888888888888888888888888888888888888888888888888***88:                                                                                                                                                                                                                                          
                                                                                                                                                                                       :=======++++***88888########88##888***+++***********************************8888888888################################################################888**++++========++==================================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++****************************88888888888888888888888888888888888888888888888888888888888888888888888***88.                                                                                                                                                                                                                                          
                                                                                                                                                                                       .-=====++++++*******8888##########88888888***********+************88888****8888##########888888***************************************************+++++========--============================================================++++++++++++++++++++++++++++++++++++++++++++++++++++++******************************888*888888888888888888888888888888888888888888888888888888888888888888*****8+.                                                                                                                                                                                                                                          
                                                                                                                                                                                        :=======++++++++++++**++++*888*88**++++*88888*****************88888888888########888***+++++++=+++++++++++++++=++++====++=====++===+++++++++++++=========-----------===================================================+++==++++++++++++++++++++++++++++++++++++++++++++++++++++++*******************************888888888888888888888888888888888888888888888888888888888888888888888****88-                                                                                                                                                                                                                                           
                                                                                                                                                                                        .-=======+++++++=+++++====++==+++**++++++*******888888888888#######8888888*****+++==+=====+++=------=======================++++++++++++++++======-======---------------------========================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*********************************8**888888888888888888888888888888888888888888888888888888888888888*******:                                                                                                                                                                                                                                           
                                                                                                                                                                                         :===============================++++*++++++++++++++********8****++++++==++==++++=====-===---------================+++++++++++++++++++++=============------------------------======================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++****************************8**8888888888888888888888888888888888888888888888888888888888888888888********.                                                                                                                                                                                                                                           
                                                                                                                                                                                          -==============+==========--=========================----=======--====------::-----::......:------==========++++++++++++++++++++================--------------------------------=================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***************************88*88888888888888888888888888888888888888888888888888888888888888888888*******+                                                                                                                                                                                                                                            
                                                                                                                                                                                          .-=======================---======---==========-------::-==---------:::::::--:::::::::::::::---==========+++++++++++++++++++++===============------------------------------------================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*****************************888888888888888888888888888888888888888888888888888888888888888888888*******-                                                                                                                                                                                                                                            
                                                                                                                                                                                           :-=-===========-------==--================-----------::--------:::---:--::::::::::::-------==========+++++++++++++++++=================------------------------------------------=----==============================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************88**88888888888888888888888888888888888888888888888888888888888888888888********:                                                                                                                                                                                                                                            
                                                                                                                                                                                            :--========-----------=======-==========------------::-==-----::--:::-::.::::..:::------==========+++++++++++++++=+++=================-----------------------------------------------==============================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**************************88888888888888888888888888888888888888888888888888888888888888888888888********+.                                                                                                                                                                                                                                            
                                                                                                                                                                                            .-=-===---------------=====--===========-------------::-=-------------------:---------====++++++++++===++++=====+=====================-----------------------------------------------==========================++++++++++++++++++++++++++++++++++++++++++++++++++++++**+******************************888888888888888888888888888888888888888888888888888888888888888888888888********-                                                                                                                                                                                                                                             
                                                                                                                                                                                             :-====---------------===================--------------====-----=----====--================++++++++++++++======++++====+===========-------------------------------------------------==========================++++++++++++++++++++++++++++++++++++++++++++++++++++++++*****+*************************8888888888888888888888888888888888888888888888888888888888888888888888888*******+.                                                                                                                                                                                                                                             
                                                                                                                                                                                             .:====--==------------===========================--==================================+++++++++=====++====+==+++++++===========----------------------------------------------------===========================++++++++++++++++++++++++++++++++++++++++++++++++++++++++*+++***********************88**888888888888888888888888888888888888888888888888888888888888888888888888********-                                                                                                                                                                                                                                              
                                                                                                                                                                                              .--==------------------==========================================++++========++++++++++==+=========++++++++++++==============----------------------------------------------------========================++++++++++++++++++++++++++++++++++++++++++++++++++++++++******************************88**888888888888888888888888888888888*88888888888888888888888888888888888888*******+.                                                                                                                                                                                                                                              
                                                                                                                                                                                               .:=---------------------=====================+================+====++++++=+++++++++++===+++++++++++++++++++++==============-----------------------------------------------------=======================++++++++++++++++**++++++++++++++++++++++++++++++++++++++*******************************88888888888888888888888888888888888888888888888888888888888888888888888888*********=                                                                                                                                                                                                                                               
                                                                                                                                                                                                .---------------------===========+===+++++++++========++++++++++++++++++++++++++++++++++++++++++++++++++++++==============-----------======------------------------------------====================+++++++++***+++++++++++++++++++++++++++++++++++++++++++++++++*****************************888888888888888888888888888888888888888888888888888888888888888888888*8888*********:                                                                                                                                                                                                                                               
                                                                                                                                                                                                 :=--------------------==========+++++++++++++++====+++++++++++++++++++++++++++++++++****++++++++++++++++++==================-------==========---------------------------------===================++++++++++***++++++++++++++++++++++++++++++++++++++++++++++++++++++++*********************88888888888888888888888888888888888888888888888888888888888888888888888888**********.                                                                                                                                                                                                                                               
                                                                                                                                                                                                 .---------------------====+====++++++++++++++++++++++++++++++++++++++++++++++*************+++++++++++++++++=================-------===========---------------------------=======================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*****************8****888888888888888888888888888888888888888888888888888888888888888888888888**********+.                                                                                                                                                                                                                                               
                                                                                                                                                                                                  :-----=--------------=====+++++++++++++++++++++++++++++++++*******************************+++++++++++++====================-------============----------------------==========================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*************************888888888888888888888888888888888888888888888888888888888888888888888888***********-                                                                                                                                                                                                                                                
                                                                                                                                                                                                   .--------------------====+++++++++**********************************************++*********+++++++++==============-----------------========----------------------=========================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*++*************************888888888888888*88**88888888*8888888888888888888888888888888888888888888***********:                                                                                                                                                                                                                                                
                                                                                                                                                                                                    .--=-----------------====+++++++***++*********************************************+*******++++++++==============--------------------===----------------------=====-====================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*****************************88888888888*888*88888888888888888888888888888888888888888888888888888888***********.                                                                                                                                                                                                                                                
                                                                                                                                                                                                     .--------------------====+++++++**************8******888888888888888*******************+++++++++=============-----------------------------------------====-===========================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**+****************************888***8*********8888888888888888888888888888888888888888888888888888**********=.                                                                                                                                                                                                                                                
                                                                                                                                                                                                      .--------------------=====+++++++*******88888888888888888888888888888888*********++++++++++++===============--------------==-----------------------================================++=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*++*******************************888***8*******8888888888888888888888888888888888888888888888888888888*********.                                                                                                                                                                                                                                                 
                                                                                                                                                                                                       :---------------------======+++++++*****888888888888888888888888888888********++++++++++===================------===--========-===-------=============================================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***+*************************88********88**********888888888888888888888888888888888888888888888888888888888*****8***..                                                                                                                                                                                                                                                
                                                                                                                                                                                                        .--------------------==========++++++**************888****8***********+*+++++++++=========================--==--=======---=----------=============================================+==++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++********************************************8888888888888888888888888888888888888888888888888888888888888**********:                                                                                                                                                                                                                                                 
                                                                                                                                                                                                         :--------------------=============+++++++*****************++++++++++++++++++=============--==============--==-----====---=------==================================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*+*****************************************888888888888888888888888888888888888888888888888888888888888***********:                                                                                                                                                                                                                                                 
                                                                                                                                                                                                          :=--------------------==============++++++++++++++++++++++++++++++++++=================================----------====---==---====================================================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********************************************888888888888888888888888888888888888888888888888888888888**************:                                                                                                                                                                                                                                                 
                                                                                                                                                                                                          .-----------------------=================+++++++++++++++++++++++++++++===============================----------======---========================================================+++===++++++++++++++++++++++++++++++++++++++++++++++++++++*+**************************8***************8**888888888888888888888888888888888888888888888888888888888888888************.                                                                                                                                                                                                                                                 
                                                                                                                                                                                                           :------------------------=========================+++++++++++++++==============----=---------------------------------==-========================================================+===+++++++++++++++++++++++++++++++++++++++++++++++++++++++**++***************8****888*******888888888888888888888888888888888888888888888888888888888888888888888888888**********=.                                                                                                                                                                                                                                                 
                                                                                                                                                                                                           .-------------------------==--====================================---------=-----------------------------------------==---========================================================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++***+***************8*****88*******888888888888888888888888888888888888888888888888888888888888888888888888888**********-                                                                                                                                                                                                                                                  
                                                                                                                                                                                                           .:--------------------------------------------------====------------------------------------------------------------------------======-===========================================++++++++++++++++++++++++++++++++++++++++++++++++++++++++**++****************8*****88****88888888888888888888888888888888888888888888888888888888888888888888888888888***********:                                                                                                                                                                                                                                                  
                                                                                                                                                                                                             :-------------------------------------------------------------------------------------:::--------------------------------------======----================================================+++++++++++++++++++++++++++++++++++++++++++++***+++****************8**********8888888888888888888888888888888888888888888888888888888888888888888888888888*******8*88**:                                                                                                                                                                                                                                                  
                                                                                                                                                                                                             .---------------------------------------------------------:::::---::::::------:::-------:------------------------------------------==----==-===---=============---=========================++++++++++++++++++++++++++++++++++++++++++***+*******************8*******88888888888888888888888888888888888888888888888888888888888888888888888888888888*****888888*:                                                                                                                                                                                                                                                  
                                                                                                                                                                                                              :--------------------------------------------------------::::::---:::::::---::::::::::::-------------------------------------------=====-----=---============----========================++++++++++++++++++++++++++++++++++++++++++************************8*****888888888888888888888888888888888888888888888888888888888888888888888888888888888888*8888888**:                                                                                                                                                                                                                                                  
                                                                                                                                                                                                              .--------------------------------------------------------::::::::::::::::::::::::::::----:::------------------------------------------------------=====-===----========================+++==+++++++++++++++++++++++++++++++++++****************************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888**.                                                                                                                                                                                                                                                  
                                                                                                                                                                                                               .-----------------------------------------------:------:::::::::::::::::::::::::::::::::::-------------------------------------------------------=====-=----=============================++++++++++++++++++++++++++++++*++++***********88****************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888********8****.                                                                                                                                                                                                                                                  
                                                                                                                                                                                                               .--------------------------------------::::::::--------:::::::::::::::::::::::::-:::::::::------------------------------------------------------------------============================+++++++++++++++++++++++++++++++++++************8****************888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*****+.                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                :----:--------:::-------------------:::::::::----:--::::::::::::::::::::::::::::::::::::::-----------------------------------------------------------=----======================+++====++++++++++++++++++++++++++++++*++*****************************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*********=.                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                :----:--------:::-------------::::::-:::::::---::::::::::::::::::::::::::::::::::::::::::::::--------------------------------------------------------======================++++++++=+++++++++++++++++++++++++++++++++***********************888*******8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888********-                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                .:----:--------------------------:::::::::-::--::::::::::::::::::::::::::::::::::::::::::::::::-----------------------------------------------------=====================++++++++++++++++++++++++++++++++++++++++*******************8*******8888888***888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*********-.                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                .:-----:----------------------------::::::-:-----------:::::::::::::::::::::::-:::::::::::::::-------------------------------------------------============================+++++++++++++++++++++++++++++++++******************888***************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******-                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                 :-----:------------------------------:::------:::::--::::::::::::::::::::::::::::----:::--::---------------------------------------=----------==============================+++++++++++++++++++++++++++********************88******************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******:                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                 :--------------------------------::---::-------::::::-::::::::::::::::::::::::::::::::::--::-----------------------------------------------------------====================++++++++++++++++++++++++******************8888********************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******.                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                 .-------------------------------------:----------:::----------:::--::::::-:::::::::---::::-----------------------------------------------------------====================+++++++++++++++++++++++++***********************888888888888888888**8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888******+.                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                  :-----------------------------------------------------------------:::::::---:::::-----:::--------------------------------------------========--=====================+++++++++++++++++++++++++++*********************888888888888*****88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888******+                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                  :----=-------------------------------------------------------:------:::::----:---------:------------====-=---==----==-====-----------=-===------===========+++=======+++++++++++++++++++++++*******************8888*8888888****88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888******=                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                  .---------------------------------------------------------------------------------------------------=============--=--======-------===-=-------=======+++++==+++==+++++++++++++++***++++****************8888888888888888****8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******=                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                  .--------------------------------------------------------------------------------------===---=====-===========-==============----=---=--=============+++++=++++++++++++++++++***********+***********88**8888888888888888***8888888888888888888888888888888*888888888888888888888888888888888888888888888888888888888888888888888888888#8888888888********-                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                   ----------------------------------------------------------------------------------==--===---==================-===---==-============================+++++++++++++++++++++***********************8888*88888888888*******888888888888888888*******888888888*888888888888888888888888888888888888888888888888888888888888888888888888888888888*88888*******:                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                   .---------------------------------===---------------------=----------------------==============================---===================+=============++++++++++++++*************************8888888888888888*88888888888888888888888**************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*8888********:                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                    :-----===------=====--------------------------------------------------------------====+++++===================----========+++===++++++=======+++++++++++++++++++++*******************888888888888888888888*888888888888888**************888888888***888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*********.                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                    .:--=================--===-------------=----------------====-------====----=========+++++==+++==+===========-----=-=======+++++++++++++++++++++++++++++************************88888888888888888888888888888888888888888**888888888888888888888888*8888888888888888888888888888888888888888888888888888888888888888888888888**8888***8888888888********.                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                      -=======-=====-==============------------------=========================-=======+===========++++==+++==============+++++++++++++++++++++++++++**+********************8888888888888888888888888888888888888888888*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888***888****88888888888*******.                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                       -=============================------------=---======-======================+++=========+++++++====+++=============+++++++++++++++++++++*************************888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*****8*************88888******                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                       :-============================------======---=====---======================++++++++++++++++++===++=++++++++++++++++++++++++++++++++++*************************888888888888888888888888888888888888888888**88888888888888888***888888888888*****8888888888888888888888888888888888888888888888888888888888888888888**********************************                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                        .-=+++===========================--========================================++++++++++++++++++++++++++++++++++++++*++++++++++++++++*****************88888888888888888888888888888888888888888888888888888888888888888888******88888888888888888888888888888888888888888888888888888888888888888888888888888888**************************************.                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                         .===+====================================================================++++++*++++++++++++++++++++++++++++****++++++++++++++++*****8888***88888888888888888888888888888888888888888888888888888888888888888*************8888888888888888888888888888888888888888888888888888888888888888888888888888888*88****8********************************+.                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                          :=+========+=============================================+++++++====++=+++++++++++++**+++++++*++++++++++++**********************88888888888888888888888888888888888888888888888888888888888888888888*8888888***********88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888********************************=                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                           :=+====++++++++++==================================+++++++++++++++++==++++++++++++++************+++++++++********************888888888888888888888888888888888888888888888888888888888888888888888888888888*********888888888888888888888888888888888888888888888888888888888888888888888888888888888888**8888*************************888*****:                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                            ..-=+++++++++++++++++++++=========================++++++++++++++++++++++++++++++*********************************8**88888888888888888888888888888888888888888888888888888888888888888888888*888*8888888***8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*********************************88******.                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                               .-=++++++++++++++++++++++++===============+===++++++++++++++++++*****++++++****+*******************88**8888888888888888888888888888888888888888888888888888888888888888888888888888888888*8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888********************************888*******.                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                  :=***++++++++++++++++++++++++=========+==++++++++++++++**+++*******+++************8*****888*****8888888888888888888888888888888888888888888888888888888888888888888888888888888*******8888888*******8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888**********************************88********.                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                   .-+*****+++++++++++++++++++++++++=======+++++++++++++++++++*******++***************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888********************************************.                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                     .:-=***++++**********++++++++++++++++++++++++++++++++*************************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888**88888*********************************888*********+                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                         :=+****+********************++++++++++++**+***++***********************8*88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******888888888888888888888888**8888888888888888888888888888888888888888888888888888888888888888888*****************************************88*********=                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                           .:-=++************************++++++++***********************888*****8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*******888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888****************************************************+                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                .-=+***************************+******************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888**8888**8888888*******888888888888888888888888888888888888888888888888888888888888888888888888888888888*888*****************************************************+                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                    .:==++++***8*********************************8888888888888888888888888888888888888888888888888888888888*8888888888888888888888888888888*88888888888888*88888*8888888*******88888888888888888888888888888888888888888888888888888888888888888888888888888888**********************************************************:                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                        .:--=+++**********************************888888888888888888888888888888888888888888888888888888****888****************888888888****888888888888***88888*8888888*******8888888888888888888888888888888888888888888888888888888888888888888888888888888*******************************************8888888*********                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                        .:-----------=++==+++++++***********************************88888888888888888888888888888**********************************8*******888888888888888****************************8888888**8888888888888888888888888888888888888888888888888888888888888*************************************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                        :----------------------===+++***888888888888888***********************************************************************88**88888888888888888*******8888888*********************888888888888888888888888888888888888888888888888888888888888888888888**************************************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                       .:-----------------------===++****888888888888888888***********************************************************************888888888************8888888888*********************8888888888888888888888888888888888888888888888888888888888888888888****************************************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                       .:-----------------------====++****88888888888888888*********++++*******************************************************************************************************8888888**88888888888888888888888888888888888888888888888888888888888888888***********************+************************8888888*********                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                       :------------------------=====++****88888888888888888*****************************************************************************************************************************888888888888888888888888888888888888888888888888888888888888888*******************++***++***************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                       :------------------------======+++****888888888888888888*********+++***************************************************************************8888*********************8888888***8888888888**88888888888888888888888888888888888888888888888888********************++++*++***************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                      .:-------------------------======++****88888888888888888888*********+**+++*******************************************************************88888**8****88****888*********888888888888888888888888888888888888888888888888888888888888888888888************+++++******+++++***************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                      .----------------------------====+++*****88888888888888888***************++++++*********************************************88***88**********888888888***88****888**********88888888888888888888888888888888888888888888888888888888888888888888***********+++++++++**+++++++**+***************8**********8********                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                      :----------------------------====+++++*****888888888888888****************+++++****************************************88**********************8888888***88****888**********8888888888888888888888888888888888888888888888888888888888888*****************++++++++++++++++++++++***********************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                      :-----------------------------====+++++*****888888888888888****************++++******************************************************************888888888888888888888888888888888888888888888888888888888888888888888888888888888888888***************+**++++++++++++++++++++*************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                     :------------------------------====++++++**88888888888888888888********************************************************************************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888****************+++++++++++++++++++++*++************************************                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                     :-------------------------------====+++++***8888888888888888**********************************************************88***88*****************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888*88*****************++++++++++++++++++++++++*********************8**************+                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                     --------------------------------======++++***8888888888888888888***************************************************************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*************++*++++++++++++++++++++++++++*+************************************+.                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                    .----------------------------------=====++++****888888888888888888*******************************************************88888888888888888888888888888888888888888888888888888888888***888888888888888888888888***8888*8888888888888*********+***+++++++++++++++++++++++++++++++************************************+.                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                   ..------------------------------------====+++****88888888888888**88*******************************************************8888888888888888888888888888888888888888888888888888888888888888888888888888888888888***888888888***88****8************+++++++++++++++++++++++++++++++++*******************************8****-                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                   .:-------------------------------------====+++****888888888888888888*********************************************************8888888888888888888888888888888888888888888888888888888888888888888888888888888888*8*************8*************++***+++++++++++++++++++++++++++++++++*******************************8****+                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                ...:---------------------------------------====+++****88888888888**************************************************************88888888888888888888888888888888888888888888888888888**8888888888888888888888*************8*******************+++++++++++++++++++++++++++++++++++++++**************************************+                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                            ....:::----------------------------------------====++++****88888888888***********************************************************888888888888888888888888888888888888888888888888888888*888888888888888*****************************************++++++++++++++++++=++++++++++++++++++++++**************************************                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                       ..::::-::-===----------------------------------------====+++++****88888888888*********************************************************888888888888888888888888888888888888888888888888888888888888888888*******************************************++++++++++++++++======+++++++++++++++++++++**************************************                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                    ::::-----=++++==-----------------------------------------====+++++*****888888888888******************************************************888888888888888888888888888888888888888888888888888888888888888********************************************++++++++++++++++=========++++++++++++++++++****************************************-                                                                                                                                                                                                                                                    
                                                                                                                                                                                        ..::...:::---:--------::.    .   ...   .:::::=----=+*++=---------------------------------------------======++++*****88888888888******************************************************888888888888888888888888888888888888888888888888888888888**8**********************************************++++++++++++==++==============++++++++++++++**************8**************888*********                                                                                                                                                                                                                                                    
                                                                                                                                                                                 ..:--===+++++++=-+8#######%%#8*=:.::..........::--=====++*+==------------------------------------------------======+++++****88888888888*****************************************************88888888888888888888888888888888888888888888888888888888*************************************************+++++++++++====================++++++++++++++**************8***********888888******8**-                                                                                                                                                                                                                                                   
                                                                                                                                                                                :=====++=:==++++*+=+8%%%%%%%#*-:............:----==++*++=-------------------------------------------------------======+++++****8888*888**88**************************************************8888888888888888888888888888888888888888888888****888*************************************************++++++++++++++===================++++++++++++++++**************8888888****88888888888*88**--                                                                                                                                                                                                                                                 
                                                                                                                                                                            .:--------==-:--=++**8++8##88*=-:.......::....:-==++***+==------------------------------------------------------------=====+++++****8888888**88**************************************************8888888888888888888888888888888888888888888*****************+******************************************+++++++++++++==================+++++++++++++++++**************88*****88888888888888888888######8++++=:.                                                                                                                                                                                                                                     
                                                                                                                                                                        .::-::.. .......  ..-=+**+---::..................:=*888*+=-----------------------------------------------------------------=====++++++*****888*****888***********************************************8888888888888888888888888888888888888*************+++*************************************************++++++++===+++==================+++++++++++++++++**************8888***88888888888888888888#%%@@@@@@@@@%#*=-:                                                                                                                                                                                                                                 
                                                                                                                                                                    .:...:::-==+*****+--+***+===-:::::.................:-+8#8*==--------------------------------------------------------------------====++++++***************************************************************8888888888888888888888888888888888***********+++++++++**********************************************++++++++++++++++====================++++++++++++++**********************88888888888888888888888###%%@@%#8**8###8*++-:.                                                                                                                                                                                                                         
                                                                                                                                                               .::::..:=*###%%%%%%%%%8+#%%%%8+=-:::::.................::=88+=------------------------------------------------------------------------====++++++***************************************************************88888888888888888888888888888888******++++++++++++++++****++++*************************************+++++++++========================++++++++++++++++**********88***********8888888888888888888888**++**8888*88#%%######88*+=:                                                                                                                                                                                                                     
                                                                                                                                                             ..::-=*8##%%%%%%%%%%%%%8+8#%%%#*=--:--:....:............:-+88+---------------------------------------------------------------------------=====+++++++******8**8*************************************************888*88888888888888888888888*********++++++++++++++++++++++++++************************************++++++++++========================++++++++++++++++*************************8888888888888888888888*************88#######88***+=:.                                                                                                                                                                                                                 
                                                                                                                                                            ..:+#%%%#%%%%%%%%%%%%%%8+*##%%#8+-----:...::............:-=**+-----------------------------------------------------------------------------======+++++++******8*******************************************************88888888888888*****8*******+++++++++++++++++++++++++++++*************************************++++++++++=======================+=+++++++++++++************************8888888888888888888888888888*******8*****888###8*++**++++=-:.                                                                                                                                                                                                            
                                                                                                                                                        .:=+8##%##%%%%%%%%%%%%%%%%8*8#%%%%*+=----::...::......::::.::=+*=-------------------------------------------------------------------------------=======+++++++**********************************************************88**************888*******+++++++====+++++++++++++++++++++**++*+++**************************+++++++++++=========================+==+++++++++++***************************888888888888888888888888888*+****888**88**8888#%%@@%###%%%##*-:                                                                                                                                                                                                        
                                                                                                                                                      .=8#%%#%#%%%%%%%%%%%%%%%%%%#*8%%%%%#+=----:::.:::............:-+*+=---------------------------------------------------------------------------------======++++++++*************************************************************8888***********++++++++++=======+++++++++++++++++++++++++++++************************++++++++++++==========================+==+++++++++++***************************88888888888888888888888888#8***++***88888888*8#%@@@@@%#%@@@@@@@%*-.                                                                                                                                                                                                    
                                                                                                                                                   .-+8#%%%%%%%%%%%%%%%%%%%%%%%%%8*#%%%%%8=---::::::::::...........-=+*=------------------------------------------------------------------------------------=-======++++++************************************************************************++++++++++=========++++++++++++++++++++++++++***************************++++++++++++============================++++++++++**************************888888888888888888888888888888##8**++***88888888888#%@@@%##%@@@@@@@@@%#*:                                                                                                                                                                                                 
                                                                                                                                                 .-*####%%%%%%%%%%%%%%%%%%%%%%%%%88%%%%%#*=--::::::.:::::.........:-=++=---------------------------------------------------------------------------------------=====+++++++++****************************************************************+++++++++++==+=============+++++++++++++++++++++*****************************++++++++++============================++++++++++**************************88888888888888888888888888888888#%#8**++****88888888*88#%@%%##%@@%%%%@%%%%@#+:                                                                                                                                                                                              
                                                                                                                                               .=8######%%%%%%%%%%%%%%%%%%%%%%%%%8#%%%%#8+=--::::::......:........:-++=-----------------------------------------------------------------------------------------========+++++++*************************************++***************+++++++++++++======================++++++++++++++++++++*****************************++++++++++=============================++++++++++************************88888888888888888888888888888888888#%%#8**+****888888888*8#%@%##%@@%%%%%%%%%%%%%#*:                                                                                                                                                                                           
                                                                                                                                             .=8#######%%%%%%%%%%%%%%%%%%%%%%%%%#**%%%%#*=-:::::::................:=++=-------------------------------------------------------------------------------------------========+++++++**************************+++++++++++++++++++++++++++++++++++=========================+++++++++++++++***++++****************************+++++++++==============================++++++++++**********************88***888888888888888888888888888888888##%#88********888888**8#@@%##%%%%%%%%%%%%%%%%%%+                                                                                                                                                                                          
                                                                                                                                          .:=8#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%**%%%%8+-::--:::.................:=++=----------------------------------------------------------------------------------------------========++++++++++**+***++++++++++++++++++++++++++++++++++++++++====================================++++++++++++++++++++**************************+++++++++==============================+++++++++++*******************8****8*888888888888888888888888888888888888##%#88*********888****8%@@%#8#%%%%%%%%%%%%%%%%%*.                                                                                                                                                                                        
                                                                                                                                 ...:::.-=8#############%%%%%%%%%%%%%%%%%###%#%%#88%%%#8=:::--:::.. .....:.........=++--------------------------------------------------------------------------------------------------=========+++++++++++++++++++++++++++++++++++++++++==============================================++++++++++++++++********************************++++++++==============================++++++++++*************************8****8888888888888888888888888888888888##%#88***++********+++8%%@%##%%%%%%%%%%%%%%%%%%%8-.                                                                                                                                                                                     
                                                                                                                          ....:-----:.-*##%#######%%%%%%%%%###8*===-----------===----===-::::::::.. ....::.........=++-----------------------------------------------------------------------------------------------------========+++++++++++++++++++++++++++++++++++=====================--------==---============++++++++++++++++++****++****************************+++++++=============================+++++++++++**********************************888888888888888888888888888888888#%#8*+++++*******++++8#%%%#8%%%%%%%%%%%%%%%%%%%%8-                                                                                                                                                                                    
                                                                                                        ...........:::::----==-::..:-*###########%%%%%%#*+=-::::::....::::::::::::...::-:::::::::..................=++=------------------------------------------------------------------------------------------------------========++++++++++++++++++++++++++++==================--=====-------------============+++++++++++++++++***********************************+++++++================================++++++++++***********************************8888888888888888888888888888888##%8*++++++++++++++==+8%%%%#%%%%%%%%%%%%%%%%%%%%%%8=:                                                                                                                                                                                 
                                                                                           ......:::-------=-==----====-----:. .:+*#%%#########%%%%%8+=::::::.....:.......::::::::. ..:--:::..:::.................:=++=-------------------------------------------------------------------------------------------------------=================================++==================---------------------========+=++++++++++++++++****+**+++**************************+++++++==============================++++++++++++++**********************************88888888888888888888888888888888#%#*++====+++======--+*88*+8##888***+***8#%%%%%%%%%#*::                                                                                                                                                                              
                                                                                  .....:::--------===-----========---::....:-=*##############%%%#*+-:.....:::::::::::::.......:::.. ..:--::::::::.................:-++=-------------------------------------------------------------------------------------------------------===-=----===========================================--------=---------============++++++++++++++++++++++*****************************++++++++++=============================+++++++++++++****************************************8*888888888888888888888888888##8*+============---------------:::::::::-+#%%%%%%%%##8*=:.                                                                                                                                                                         
                                                                  ........:::::------====---=========---------::..  ..:=+*8###%%#%#######%%%%%#*-:........:::::::::::::::.......:.. ..:--:::::.....................-+*=-----------------------------------------------------------------------------------------------------------------===========================================-=------==----==============+++++++++++++++++++++++***************************++++++++++++====--======================+++++++++++**********************************************88888888888888888888888888###*===-=========--------:::::::::::.:::.::=+*#%@@%%#8##%%%#8*+=:.                                                                                                                                                                  
                                                   ....::::-:-----------====--========---------::::::.......::--=+**8#%%%%%%%%%########%%%%#8+-:...:::::::::::::.::::....::::::.:.. ..:--:::::.....................:+*+-------------------------------------------------------------------------------------------------------------------======---=======================================----============+++++++++++++++++++++++++++**************++***********++++++++++++===============--===========++++++++++++***********************************************88888888888888888888888888##*===--======-------:::::::::::::.:...:::----=*#%%%#8****8###%%%#8+=-:.                                                                                                                                                           
                                  .....:::::-------========================------:::::.........:--====+**8####%%%%%%%%%%%%%%%%########%##8+-:....::::::::::---::................::....:--:..:::.................. .:+*+--------------------------------------------------------------------------------------------------------------------======----===-===============================================+++++++++++++++++++++++++++++***********+++++*********++++++++++++============================+++++++++++++*************************************************8888888888888888888888888##*=-----=====-------::::::..........::::::-=-::-+#@%%8*+++++++***8##%%%###*=:.                                                                                                                                                    
                         ...:::::------=-==-=============-=------:::::::....:::----===++**88#####%%%%%%%%%%%%%%%%%%%%%%##%#%########%%8+-::.......:::::::::::::::.:::.:::::.....:.....:--::..:....:................:=**=---------------------------------------------------------------------------------------------------------------------===-----------=============================================+++++++++++++++++++++++++++++++++********************+++++++++++===========---===============++++++++++++++******************************************************88888888888888888888##8+-----=====---::::::::............:::...:---:::=#%%%%#*===+++++++++++**88###88*+==---:..                                                                                                                                        
             ....::::-----====================--=----::::.........:-==+***88##%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%##%#%%%#8=...........:::::::::::::....:::::::::...:......:--:.........................:-+*=-----------------------------------------------------------------------------------------------------------------------------------==========================================++++++++++++++++++++++++++++++++++++****************+++*++++++++++===============================++++++++++++*********************************************************************8888888#8+-:::-=====----::::::..........:..:::..:::----::+#%%@@@%8+--:-==+++++++======+**8##%%%%%%##88**+=-::....                                                                                                                        
   ...:::------=======-==-========-=------::::.....:::--==+**8888##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%##%%#8*=:..........:::::::::.......:::.....::::::::.. ...:-:..........:...............::=*+=-----------------------------------------------------------------------------------------------------------------------------------===--=======================++++++++++++++++++++++++++++++++++++++++++++++++*****************++++++++++++++===============================+++++++++++++*************************************************************************88#8+-::::-====----:::::::..:...::..........:::----:-+8%%%@@%%%#8*+=-----===+++++++==+==+++*****88888########%%%%%%###%%%##88*+=-:..                                                                                                
---====================---:::::::.........:-==+**8###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%8*=-:.......::::::::::::::..........:::::::::::::::....:-::........::...............::=*+=------------------------------------------------------------------------------------------------------------------------------------===----=====================+++++++++++++++++++++++++++++++++++++++++++++****************+++++++++++++++================================+++++++++++++++************************************************************************88#8+-::::--===----:::::::...........::....:::::---:::=*#%%@@%%%%%%%#8*+--:::--===++++++++===================++++++**88####%%%%%%%%%%%#8**+--.                                                                                      
--------:::::::.::::::::::-----==+++*888###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%#8+-:............:::--::::::::........:::::::::::::::....:--:........::.................:-+*=-------------------------------------------------------------------------------------------------------------------------------------===---=======================+++++++++++++++++++++++++++++++++++++++++++++*++++++++++**+++++++++++++==================================+++++++++++++++++**********************************************************************88888+-::::--===---::::::::..::.....::::...:::::::---::-=*#%@%%%%%%%%%%%%%%#88*+==----------===============================++++*888#####%%%%%%##*=:.                                                                                 
:::--===+++++***8888######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%#8*=-:............::::::::::::::::::.:..:::::::::......:....:--:........:...........::..:.:::-++=------------------------------------------------------------------------------------------------------------------------------------===============================+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=====================================++++++++++++++++***********************************************************************8888+-::::-----=--:::::::::::::.........:::::::::::-----=+#%%@%%%%%%%%%%%%%%%%%%%%%#88**+++===---:::-:::::::::-----========+++=======++*##%%%%%%%%#8+=.                                                                             
######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%#8*+=-::...............::::::::::::::::::::::::::::::::::..... ..:--:................ ..:::.::.::::=+=-------------------------------------------------------------------------------------------------------------------------------------===========================+==+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++===========================================+++++++++++*************************************************************************88888+-::::--------:::::::::............:::::::::::--------*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########888888****+++===---------===========++*8##%%%%%%%#*=-:                                                                        
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%#88**=-:....................::::::::::::::::......::......:::.:::::. .::--::..............  .:::.......::-++----------------------------------------------------------------------------------------------------------------------------------------=============================++==+++++++++++++++++++++++++++++++++++++++++++++++++++++++++=========================================+++++++++++++**************************************************************************8888+-::::--------:::::::::...........:::::::::::::-------+#@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###8**+=-:---==++++++====*8#%%%%%%%%#8=:                                                                     
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#######8***+++=--::..........................:::::::::-:::::..................:::::....:--:::.............. ..:........:::=+=-------------------------------------------------------------------------------------------------------------------------------------------===============================++++++++++++++++++++++++++++++++++++++++++++++++++++++++=======================================+++++++++++++***************************************************************************8888+-::.:--------::::::::............:::.::::::::::------=*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##8*+==--===+++++===+*8#%%%%%%%%#+:.                                                                 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###888**++==-----::::::.............................:..:::::::::::::::::::...............:..... ...---::..................:::.......:-++------------------------------------------------------------------------------------------------------------------------------------------------===========================++++++++++++++++++++++++++++++++++++++++++++++++++++==++=++==================================++++++++++++++****************************************************************************888+-:::::----=--::::::::.............::::.:::::::::------=*#%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#8=----=++++++===+8%%%%%%%%%#*=.                                                              
#%%%%%%%%%%%%%%%%%%%%%#%%#%%##%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####8888**++==----:::::::::::::::::..............................:::::::::::::::::::::::::.......................:--:::::..................:........:-+-------------------------------------------------------------------------------------------------------------------------------------------------------======================+++++++++++++++++++++++++++++++++++++++++++++++++++=======================================++++++++++++++***************************************++++**********************************88*+-:::::----=--:::::::::............:::::::::::::--------+8#%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*+=--=+++++++++8#%%%%%%%%#8*-.                                                           
%##%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88*****+==--::::::::::::::::.......::::::::::::........................::::::::::::::::::::::::::::.....................   .:-:.::::::.........................:+=---------------------------------------------------------------------------------------------------------------------------------------------------------=============================+++++++++++++++++++++++++==++++++++++++++=====================================++++++++++++++++++******************************++*++++++++++*******************************888*=-::::----==--:::::::::............:::::.:::::::--------=+*8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*=--=++++*+==*8#%%%%%%%%%#=.                                                         
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###8888***++===---::::::::::.................................::.........................:::::::::::::::::::::::::::::::...................  ...:::.:::.......................   .:=+=------------------------------------------------------------------------------------------------------------------------------------------------------------===============================++++++++++++++===============++++++=====================================+++++++++++++++++******************************+++++++++++++++++****************************888*=::::---------::::::::::..........::::::::::::::::------===++++*88##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#8+=-==+****+=+8%%%%%%%%%%#8=:.                                                     
8888888********************+++++=========-----:::::::::::::::::::..............................................................::::::::::::::::::::::::::::::.:...................   ..:::...:.......................  ..:-++---------------------------------------------------------:-------:----------------------------------------------------------------------------------------------==============================+=======================+++++++==+====================================++++++++++++++*********************************+++++++++++++++++++*************************888+-::::----------::::::::::.........::::.........::::-----======-::--=++*8#%%%%%%%@@%%@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%8+--+*****++8%%%%%%%%%%%%%#*=.                                                  
-----::::::::::---:::::::--:::::::::::::::::::::::::::::::::::::::::.......... ..................................................:::::::--::::::::::::................:............   .:::...:............................:=+=----------------------------------------------------------==----------------------------------------------------------------------------------------------------------==================================+==========++++++++========================================++++++++++++++****************************+++++++++++++++++++++++++*************************8*+-::::---------::::::::::..........:::........:::::::-----======-:::::::--====+++**************++++++++++++++++***88##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*==+*8***+*#%%%%%%%%%%%%%%#*=:.                                              
:::..:::::::::::::::::..:::::.......:::::::::::..............:::::::::::.......................................................::::::::::::::::::::::::............................   .::...::............................:-++=-------------------------------------------------------=+++====--------------------------------------------------------------------------------------------------===-=========================================+++++++++++++======================================+++++++++++++++**************************+++++++++++++++++++++++++++*************************8*=::::---==-----:::::::::::........:::::.....:::::::::::---======-::::::::::::::::::::::::::::::::::---------:----------=++*8%%%%%%%%%%%%%%%%%%%%%%%%%#+==***8*==*#%%@%%%%%%%%%%%@%#*=:                                           
...........:::...........::::::...................::..::::::::::::..:::::::::................      ..............................::::::::::::::::::::::..............::::::.........   .::................................::=+==------------------------------------------------------+++*++++==-----------------------------------------------------------------------------------------------========================================++++++++++++==++==========================================+++++++++++++***************************++++++++++++++++++++++++++++***********************88+-:::::------=--::::::::::..........::::.:::::::::::::::----=====-:::::::::::.::::::::::::::::::::::::::::::::::::::::::-----==*88#%%%%%%%%%%%%%%%%%%@%%8+=+****++=+8%%%%%%%%%%%%%%%%%%8+=-:.                                     
......................................::..............::::::::::::..........................            .........................:::::::::::::::::::::::::......::...:::::::::::....    ::........... .....................:-=+=------------------------------------------------------=+******++=---------------------------------------------------------------------------------------------===============================================+++++++++++++=========================================++++++++++****************************++++++++++++++++++++++++++++***********************8*=:::::---------:::::::::::..........:::::::.::::::::::::-----=====-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-=*#%%%%%%%%%%%%%%%%%%%%*+=+****+===*#%%%%%%%%%%%%%%%%%%%##*+=:                                 
..........................:.............::::::::::.........::::::::::::.....................................................::::::::::::::::::................:::::::::::::::::::::......:............ ....................::-++=------------------------------------------------------=+******++=-------------------------------------------------------------------------------------------===============================+===================+++++++++===+====================================+++++++++++****************************++++++++++++++++++++++++++*++***********************8+-:::::---------:::::::::::..........:::::...::::::::::::-----=====--::::::...:::::::::::::::::::::::::::::::::::::::::::--::--::::..:-=+8#%%%%%%%%%%%%%%%@%#+++*****++=-+*##%%%%%%%%%%%%%%%%%%%%#8*=-:.                           
.................................::::::....::::...:::::..........:::::::::::...................:..............................::::::::::::::::..................::::---::::.......:......::............. ...................:-=++=------------------------------------------------------==+*****+=-------------------------------------------------------------------------------------=============================================================+=======+====================================++++++++++****************************++++++++++++++++++++++++++*++++***********************+-:::::---------::::::::::...........::::.....:::::::::::-----=====--:::::::..::::::::::::::::::::::::::::::::::::::::::::-----::::::::::-=+8%@%%%%%%%%%%%%@%#*+******+++--:-+*#%%%%%%%%%%%%%%%%%%%%%%%##8+=--::.                  
::::::::::::.........................:::::::::..........::...:............::...........................................:::::::::::::::::::::::..............:::::::--:::::...............::............   ............ . ....::=++=--------------------------------------------------------=++++=----------------------------------------------------------------------------------============================================================+++===========================-===================+++++++++++*************************+++++++++++++++++++++++++++++++++***********************=::::::---------::::::::::..........:::::.........::::::::-----=====-::::::::::::::::::::::::::::::::::::::::::::::::::::::----::::::::..:::-+8%@%%%@%%%%%%%%@%*==++*+++++++=---=+88#%%%%%%%%%%%%%%%%%%%%%%%%%%##8*=-::.      ..:-=
........:::................................::::..::......................................................................:::::::::::::::::::.........::....::::::----::..............    .::............ ......................:-=+=------------------:-------------------::-----------------------------------------------------------------------------------------------------==============================================================+++==========================--=================++++++++++++*************************++++++++++++++++++++++++++++++++************************+-:.::::--------:::::::::::..........:::....:::::::::::::::-----=====--:::::::::::::::::::::::::::::::::::::::::::::::::--:-----:::::.........:-+#%%%%%%%%%%%%%@%8+--=+++++++++++==----=+8##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
..................................................::::::::....................................................................::::::::-:::::::::..........::::-------::....  ........    .:::..................  ...... ........:-=+---------------------------------------------------------------------------------------------------------------------------------------==-====--=========================================================+++============================-===============+++++++++++++++************************+++++++++++++++++++++++++++++++++************************+:..:::----==--::::::::::::..............:::::::::::::::::::----=====--:::::::::::::::::::::::::::::::::::::::::::::::::::-----::::::..........::-*#%@%@%%%%%%@%%@%8+---=+++++++++++++==--:-=+*8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
....................................::..................:::::::::...........::::......................................:::::::::::::::::::::::::::::::::::::::::::::::::................  ..::........:.......... ................:-+=--------------------------------------------------------------------------------------------------------------------------------------==--=======================================================++++++++++++++========================================++++++++++++++************************+++++++++++++++++++++++++++++++++++*********************8*-:::::::-------::::::::::::............:::::::...:::::::::::-----=====--:::::::::::::::::::::::::::::::::::::::::::::::--------::::::........:::::-=8#%%%%@@@%%@%@@%%#8+-:--==+++++++++++++===--==++*88##%%%%%%%%%%%%%%%%%%%%%%%%%%%
.........::...............................:......................::::::::::..::...........................................::::::-::::::::::::::::::::::::-:::::::::::..... ............. .::::..................................:::=*==------------------------------------------------------------------------------------------------------------------------------------===================================================================+++============================================++++++++++++************************+++++++++++++++++++++++++++++++++*++**********************=:::::::--------::::::::::::............::.......::::::::::::-----=====--:::::::::::::::::::::::::::::::::::::::::::::::--------::::::...::::::::::::-+8#%@%%@@%%%%%%@%%%#*=-:::-==+++++++++++++++===-----=++**88####%##%%#######88**
.......................::::::..........:::..............................:............:........................:::::...:::::::::::----::::::::::::::::::-------:--::::....  .... ........ ..:::............  .....................::-+++------------------------------------------------------------------------------------------------------------------------------------====================================================================================================================+++++++++**************************++++++++++++++++++++++++++++++++++++********************+-:..:::---------:::::::::::.............::....:::::::::::::::-----=====---:::::::::::::::::::::::::::::::::::::::::::::---------::::::........:::.:::::-+8%%%@@%%%%%%%%%@%%%#8*+--::---====++++++++++++++=====-======================
........................:::::::::.::....::.:...................................................................::::::::::::::::::::::::---::::::::::::---------::::..............::....  ...:-:........... ...........:...........::-=++=-----------------------------------------------------------------------------------------------------------------------------------================================================================================================---===============+++++++++***************************++++++++++++++++++++++++++++++++++**+****************8*+=:...:::::-------::::::::::...............::.::::::::::::::::::----======--::::::::::::::::::::::::::::::::::::::::::::::--------::::::::.............::::=#%%%%%%%%%%%%%%%%%%%%%%#8*=-::.::---==++++=====++++++++====+++++++=+++++++=
:::::..:::.......................................................................................................:::.:::::::::::::::::::::::::------------=-:--::::......... ...............::-:........... ......................:::-=++=------------------------------------------------------------------------------------------------------------------------------------===============================================================================================================+++++++++*************************+*++++++++++++++++++++++++++++++++++++++++****************=-:::::::---------:::::::.::................:::::..........:::::-----=====--:::::::::::::::::::::::::::::::::::::::::::-----------::::::::..............::.:=*#%%%%%%%%%%%%%%%%%%%%%%%%%##8*+=--:::::---========+++++++++=+++++++======
::::::::.........................................................:..........................................::..::::.:::::::::::::::::::::::::::------------::::.............................:::........... ........................:::-+++----------------------------------------------------------------------------------------------------------------------------------===============================================================================================================++++++++++************************+++++++++++++++++++++++++++++++++++++++++++++************8+-:::::::---------::::::::::..................::::::::::::::::::::----=====--::::::::::::::::::::::::::::::::::::::::::::----------:::::::::::....:..:::::..::-+8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88*+=-:::::::----===========----::::-
..::::::.....................................  ......................................................................:::::::::---::::::::::---::-----------::::....      .....................:::......................................:-=+=---------------------------------------------------------------------------------------------------------------------------------===============================================================================================================+++++++++*************************++++++++==++++++++==++++++++++++++++++++++++************8+-:::::----------:::::::..:::..................:::::::::::::::::::-----======-::::::::::::::::::::::::::::::::::::::::::::----------::::::::.::....:::::::::::::-+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####8**++==-------=====++**88##
..:::..............................:::::::.....           ...........................................::::::::............::::::-----:::::::---------------:::::.......  ..................  ...::........................................:=+==--:-------------------------------------------------------------------------------------------------------------------------------=============================================================================================================++++++++*************************+++++++===+++=======+++++++++++++++++++++++************8*=:::::-----=--=--::::::..::::...................:::::::::::::::::::----======--:::::::::::::::::::::::::::::::::::::::::::------------::::::.............:::::::-=*#%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...........................................::::.................    ................................:::::::::::::::::::::::::::-----:::-::::::---:-----:::::........... ................... ....::.   ....................................:=++=-----------------------------------------------------------------------------------------------------------------------------------===========================================================================================================+++++++****************8*********+++++++==============+++++++++++++++++++++*************+=::::::----------::::::...::....................::::::....:::::::::-----======--:::::::::::::::::::::::::::::::::::::::::::------------::::::........:::::::::::::-+*8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
..........................................................:::.....................................:::.:::::::::::::::---:::::::------:--::::::::::::::::............ ....................... ....:................................:........:=+++=---------------------------------------------------------------------------------------------------------------------------------===========================================================================================================++++++++***********8*************+++++===============+++===+++++++++++++++**************=-:.:::----------:::::::..:::.....................:::.....::::::::::-----======---::.........::::::..::::::::::::::::::::::::-----------:::::.......:::::...::::::--===++*#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.......::..............................................................................................::::::::::::::-------------------------:::::::::..........................................::.. ......................................:-+++=---------------------------------------------------------------------------------------------------------------------------------==========================================================================================================++++++++***********88**********+++++++====================++++++++++++++++*************=:::::-----------:::::::...:::.....................::......:::::::::::----======---:::::::::::::::::.:::::::::::::::::::::::------------:::::::...............:::::--===----=++*8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...........:::.......................................................................................:::::::::::::::::::::----------------------:::::::......... ... .............................::..   ..............................::::..:-=+*=-------------------------------------------------------------------------------------------------------------------=====---------========================================================================================================+++++++++********8************++++++++======================+++++++++++++++************+:...:------------:...::...:........................:.....:::::::::::::----======---::::::::::::::::::::::::::::::::::::::::::-----------::::::................:::::--===-:::::::--=+**88#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:::.........:::....................................................................................:::::::::::::::::::::::::::---------:-----------::::. ......     ............ .............  ...:::..  .............................::::....:-=++--------------------------------------------------------------------------------------------------------===-----=========---------======================================================================================================++++++++**********88*88*******++++++=========================+++++++++++++************=::..::-----------::........... .....................::......::::::::::::----==+==----::::::..::::..............:::::::::::::::-----------::::::.............:::::::---=---::::::::::::::---=+++**88####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##8*
::::::::::...::...................................................................................:::.:::::::::::::::---::----------------:::::::::::::............    .......    ..................:::..................................::......:=++=--------------------------------------------------------------------------------------------------------=-==--==============-----====================================================================================================++++++++******8888888*8888****+++++++=========================++++++++++++************=::..:::----------:::.................................::....::::::::::::::----==+===----::::::::::...::::.......:::::::::::::::-----------:::::::..........:.....::::-------:::::::::::::::::::::::----====+++**8888####%%%%%%%%%%##88*++===---
::::::::::..::.........................................................................................::::::::::::::::::----------------:::::::..............:..............  ..............::......:::................... ...............:......:-++=-----------------------------------------------------------------------------------------------------======--=======--======-==-----==--===========================================================================================++++++++*******88888888888*****+++++++==========================+++++++++++**********+=:...:::----------:::::...............................:::....:::..:::.:::::----=====--------:::::::::::::::::::::::::::::::::---------------::::::..........::....:::::-----::::::::::::::---::::::::::----------------============-----::-:::::
::::::::::.............................................................................................::::::::::::::::----------------:::::::................................................::......:::..................    ......::.....:.......-+*+=-----------------------------------------------------------------------------------------------------==============-===========-------===========================================================================================+++++++++*******888888888******+++++++============================++++++++++********+=:::::::------=---:::::...........:::.................::::::::...::::::::::::----====--::::::::::::::::::::::..:::::::::::::::---------------:::::::........::::::::::::---::::::::::----::::---:::::::::::::--::::::::::::::::::::::::::::::::::
:..:::::::::...................................    ................................................::.::::::::::---::::---------------::::::::..................................          ..............:::.................     .......::...........:=+++=-------------------------------------------------------------------------------------------------------=================-=======---==================================================================---=======================+++++++++******888888888******++++++++============================++++++++*********+=::::::----------:::::::................................:::::.....::::::::::::::---====--::::::::::::::::::::::::::::::::::::----------------::::::::.::.....:::::::::::::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-
..:::::...:::::::.................................................................................::::::::::.::::::::--------------:::::::::::...............::...............     .................  ...::.....................  .....:::::...........:=++==----------------------------------------------------------------------------------------------------=================--=========================================================================---------------==-=============++++++*******88888888*****+++++++++=============================+++++++*********+=:....::---------:::::::::..............................:::::.....::::::::::::::::--====---::::::::::::::::::::::::::::::::::::---------------:::::.........::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::......:.......................................................................................:::::::::::::::----------------:::::..:...................  ...................................  ...:::..........:................................:-=+==-----------------------------------------------------------------------------------------------======================-=======-=============================================================---------------------===============+++++******888888888****+++++++++==============================++++++++*******+-:...::::---------:::::..::...:.........................:::..............:::::::::::--====-::::-::::::::::::::::::::::::::::::::---------------::::::::::::::.............::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::...................................     .............................................:::::.::::::::::::::---:-----------------::::......................................   ........................:::...........::................:...............:====---------------------------------------------------------------------------------------------===============================================================================================------------------===============++++******888888888*****+++++++++=============================+++++++++*******-.....:::---------:::::::.:::......::...................:::::.......:::::::::::::::::----===-::::::::::::::::::::::::::::::::::-:::-----------::::::::::....................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::..............:.........................................................................::::::::::::::::::::::::::----------------::::::............................. .....   ...........................:::....................................::.....:.:-===---------------------------------------------------------------------------------------------=--===========================================================================================-------------------=============++++******8888888888******++++++===============================+++++++++*****+=:....:::---------:::::::::::::.....::...................:::::......:::::::::::::::::-----===-::::::::::::::::::::::::::::::::::--------------::::::.........................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::....::::.....:::::::......................................................................:::::::::::::-:::::::::::::---::::::::::::::......................................                ......... ...:::.....::::.......:...................::::::::..:-=+==--------------:::-------------------------------------------------------------------------===============================================================================================--------------------===========++++******8888888888******+++++==============================+++++++++++****+-:.:::-------------:::::::::::::............................::.....:::::::::::::::::::-----====-:::::::::::::::::::::::::::::::::::--------------:::................................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
........::::::.:..........:....................................................................:::...:::::----:---------:::::--:::::::::............................................       ...................::::...:::::.....::::..................:::::::.:..:-===--------------:::-:::------------------------------------------------------------------==============================================================================================-----------------------==========+++++*****88888888888****+++++++===============================+++++++++++++=-::::--------------:::::::::::..................................:::::::::::::::::::::::::----===-::::::::::::::::::::::::::::::::::---------------::::.................................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::..........:::::.::...............................  .............................................::::::::::-------------:-:::::::::...................       ...................     ..........................:::....:::.........:.................:::::.::::::::-=+=--------------::--------------------------------------------------------------------===============================================================================================-----------------------==========+++++*****88888888888***+++++++===============================+++++++++++*+=::::::-------------::::::::::::.   ..........................:::.::::.::::::::::::::::::--------==-:::::::::::::::::::::::::::::-:::--------------::::::.....................................::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::..........::::.................    ....................................................:::::::::::::::-------------::::::::.....................::........................................................:::..............:....................:::::::::::::=++=-------------:-----::-----------------------------------------------------------=============================================================================================---------------------------==========+++++*****8888888888****+++++++=============================+++++++++++++=-::::::-----==-------::::::::::::.............................::::..:.......::::::::::::::--------===--::::::::::::::::::::::::::--------------------:::::::::..................................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
..:::::::::..............:....................................................................:::::::-::------------------:::::::..........    . ...................................   ......................  ....:::::..................................:..........:-=++=-----------------:::-----------------------------------------------------------==========================================================================================-----------------------------=========++++++****88888888888****++++++=================================+++++++++=:::::::--------------::::::::::::....:::...................:...::::..........:::::::::::::::::::----===-::::::::::::::::::::::::::--------------------::::::::::::::::::..................::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::........::::.........................        ....................................::::::::::::::::::::--------------::::-::::::::............................................. .... ......   ................    ..:::::.............................:::::::::......:::-=+=-----------------------------------------------------------------------------=--======================================================================================------------------------------=========++++++****88888888888***++++++==================================+++++++=-::::::::--------==--:::::::::::::....::........................::::..............:::::::::::::::::::--==--:::::::::::::::::::::::::------------------:::::::::::.:::::...............:::::::::::::::::::::::::..:::::::::::::::::::::::::::::::::::::::::::::
:::::::........................         ................................................:::::::::::::----::-------------:::::::::::...................................................................................::::.......::.::::......................::::::.....:::-==------------------------------------------------------------------------------==================================================================================--====-----------------------------========++++++****8888888888***+++++====================================+++++=-:::::::::------------:::::::::::::................::::::.........:::..........::::::::::::::::::::::::---==--::::::::::::::::::::::::----------------::::::::::::::::::::::.............:...........:::.:::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::..:::.........................     ............. ...    .........................:::::::::::::::::-------------------::::::..........................................  .........  .............................. .....:::.....::..::::......................::::::.......::-===---------------------------------------------------------------------------===================================================================================-----------------------------------========+++++***88888888888***++++=====================================++++=-:::::::::-----------::::::::::::::....::.............................................:::::::::::::::::::---===-:::::::::::::::::::::::--------------:::::::::::::::::::::............................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
........................................... .........................................:::::::::::::::::::::---:-------:::::::::::......      .....................................  .......................................:::::............:..................::::::...........:--===-----------------------------------------------------------------------================================================================================----------------------------------------======+++++***88888888888***++++=====================================++=--::::-::::------------::::::::::::.....................................................:::::::::::::::::::-----===--:::::::::::::::::::::--------------:::::::::....................................::::::::::::::::::::::::::::::......:::::::::::::::::::::::::::
.......:......................................................................:..::::::::::::::::::--::::------------::::::::::::...........................................................................................:::::........::.::::...............::::::...:.........:-===---------------------------------------------------------------------================================================================================----------------------------------------======++++***88888888888****++++=====================================+-:::::::::--------------:::::::::::..................................:...............:............:::::::::::::----===-:::::::::::::::::::::--------------::::::::::::....::........................:::.:::.......:::..:::::::::::.........:::::::::::::::::::::::::::
:::::................................::.......................................:::::::::::::::::::::--------------------::::::::..........................................................................................  ...::::..........::::::..............:::::.....:::........-=--------------------------------------------------------------------================================================================================----------------------------------------=======++++***888888888888***++++++===================================-:.:::::::--------------::::::::::::......::....................::...................::::::::::::::::::::::::::::-----==-::::::::::::-::::::::------------:::::::::::::::........................................::::::::::::::::::::::::::::::::::...:...:::::::::::--
::::::::......................      ...  .    ....................................::::::::::::::::::::::----:-----------::::::::.:................................................ ....................................::......:::::..........::::::.................:..............  .:--=-----------------------------------------------------------------==-========================================================================---------------------------------------------====+++++****888888888888**+++++==================================--::::::::::--------------:::::::::::::.....::...............................:::...........:::::::::::.:::::::::::::::----=-:::::::::::------::::::----------::::::::::::::::.:................................:::::..::::::::::::::.::::::::::::::::::::::::::::::::::::-
.....::::::........................         .........................................::::::::::::::::::----::::----::::::::::...........................::::::..............     ........  ....................................::::::...............................::::..................::----------------------------------------------------------------------======================================================================--------------------------------------------====+++++****88888888888***++++================================--:::::::::::--------------:::::::::::::....:::................................:............:::::::::::::::::::::::::::::----===---:::::::::::-:::::-----------::::::::::::::::::..................::...........::::............::::::::::::::::::::::::::::::::::::---::::::
.....::::::..::................. .        ..     ...........................::::::::::::::::::----::--------::::---:::::..:::..................:::::::::::::::....................................::...............................:::::....................::::.....:::.....................:--------------------------------------------------------------------=======================================================================------------------------------------------=====+++++****88888888888**+++++===============================-:::....::::----=---------::::.:::::::::::::::::...................................::.......:::::::::::::::::::::::::::::::----===-:::::::::::::::::::----------::::::::::::::::::::::::::::::::::::..........::::::......:::::::::::::::::::::::::::::::::::::----:::::::::::
.......::::::::............................                ..........:::::.:::..::::::::::::::-::-::-----------::-:::::................................:::::.......................................:....... ..............:::....  ...:::..................::............:.................:::.::--------------------------------------------------------------==-=============================================================----------------------------------------------------====++++++***88888888888***+++===============================--:.....::::----===----==---:..::::::::::...::::..............................:::::::.........::::::::::::::::::::::::::::::::----==--:::::::----:::::::::---------::::::::::::::::::::::::................................:::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::........::::.................. ......................................::::.....:::::::::::::::::--::-----------:::::::....................................................................................................::........:::...................::::....:............:::.......::....:::--------------------------------------------------------==--========================================-------==---==---------------------------------------------------------======+++++****88888888888***+++============================--::.....::::-----=----==-=--::..:::::::::.........................................::....................::::::::::::::::::::::::------==---------:::::::::::--------::::::::::::::::::.......................................:::::::::::::.:::::::::::::::::::::::::::::::::::::::
:::::..:.......:...................................................:..............::::::::::::::::::::--:----:::---:-:::::..:::...........................................  ..  ..       . .........::..........    ..........::::........::..................::....:.................................::------------------------------------------------------=-----===============================------------------------------------------------------------------------------======++++++***88888888888***++===========================--:::...:::::-----====---=----::.:::::::::.....:::........................................................::::::::::::::::::::::::::------===-------::---::--:----------::::::::::::::::.::.................::::...:::::...:::::::::::....:::::::::::::::::::::::::::::::::::::::::::
:::.::::.........................................................:::::::::::::::::::::::::::::::::::::-::::::::-:::::::.......:::.................   .................................  ..........::::..............................:......::::..............:....::::..................................::::--------------------------------------------------====--==========================-----------------------------------------------------------------------------------=======+++++***88888888888***++===========-============--::......::::----==--======--::::::::::::::......::...................................:...........::......:::::::::::::::::::::::::::::-------==----::::::::::------------:::::::::::::::.....::::.::::::::::::::...:::::::::::::....:...::::::::::::::::::::::::::::::::::::::::::::::
.:..:::::...........................    ..............................:::::::::::::::::::::::::::::::-:::::::::::::::::........................................................... ..........::::::::::::.....................................:::..............::.::....:..................................:::::----------------------------------------------===-=============================-----------------------------------------------------------------------------------======+++++***88888888888**+++=======--=----========--::::...::::-------==--=====--:::::::::::::::....:......................................:...::.....::::.........:::::::::::::::::::::::::--------------::::::::::::--------::::::::::::::::::::::::::..::::::::::::::::::::::::........::::::::::::::::::::::::::::::::::::::::::::::::::
:::.:::::.....................................................:::::.........:::::::::::::-::::::::::::::---:::::::::::::.............. ......................               ... ..   ............:::::::::.................................   ...:::...........................................::::............:::::------------------------------------------======================================-------------------------------------------------------------------------------=====+++++***88888888888*+++======----========--:::::::::::::::----==-==---====--::::::::::::::...:::::::::....................  ........:...::::.......................:::::::::::::::::::::---------------::::::::::::------:::..:::::::::::::::::::::::::::::::..::::::::::::::.......::::::::::::::::::::::::::::::::::::::::::-:::::::::
:::..............................................................:.:::::::::::::::::::::::::::::::::::::-:::::::::::::::.......................................... ....      ....................:::::::::::.......................................:::...............:..............................................::::-----------------------------------------==================================-------------------------------------------------------------------------------======++++***88888888888**+++======--=======---:::::::::::::::--==---------===--:::::::::::::.....::::.......................... ........:::::................::::::::::::::::::::::::::::::::---------------::::::::::::------::::::::::::.........:....:.........::::::::::::..........:::::::::::::::::::::::::::::::::::::------::::::::::
...............................................................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.......................................................................::::..:::..............   ................. .........:::................::::...........................................:::::::---------=------------------------=========================================-----------------------------------------------------------------------======+++++***88888888888**++======-=--==----::::::::::::::----===-==-----===---::::::::::::::...:::......................................:::..................::..:::::::::::::::::::::::::::::----------------:::::::::::::::::::::::::::.........:::..::....:::::....::::......::::::::::::::::::::::::::::::::::.::::::---------::::::.....
.......................................................................:::::::::::::::::::::::::::::::::::::::::::::::::::.......................................................................::::::::........................................  . .....:.............:::::..................................................::-------=-------------------------====================================---------------------------------------------------------------------------=====+++++****8888888888***++======-==---::::::::::::::::---------------==------::::::::::::...:::::......................................:::...............:::::::::::::::::::::::::::::::::::-------------------::::::::::::::::::::::::........:.:::.....::::::::::............:::::::::::::::::::::..:::::::::::::::-------:::::::...::....
...............:.............       ........................:::::::::::::::::::::::::::::::::-:::::::::::::::::::::...::........................................................................::::::::::.................................................:.................::........................:::.......................:::::----------------------------===============================-------------------------------------------------------------------------------======+++++***88888888888**+++======---::::::::::::::--------===-----=----------::::::::::::....:::::::.::::.............................:::........::::..::::::::::::::::::::::::::::::::::::::-------------------::::::::::::::::::::::::..................::::...............::::::::::::...:...::::::::::::::::::::--------::::.......::::::
............................... ...      .............:::::::::::::::::::::::::::::::::::::::--:::::::::::::::::::::::.......................................  ... ..............................::::::::::.......  .........................................................::::::::...................:::.....::::.................:::::::---------------------=============================----------------------------------------------------------------------------------======++++****88888888888*+++===--:::::::::-----::-----------=========-------::::::::::::.....:::...............................................:::::..:::::::::::::::::::::::::::::::::::::::::::--------------------:::::::::::::::::::::::...............................::::::::::::...........:::::::::::::::::::-------:::::::::...:::::::
......................................................::::::::::::::::::::::::::::::::::::::::::::::::::::::::..:::::.............................................................................:::::..:.....................................................:::::..........:::::::::.............................::::::...........:::......:::------------------=============================-------------------------------------------------------------------------------=======++++***88888888888*++==-:::::::..::---::---------------====-===-------::::::::::::.....:::..........:.....................................::.......::......:::..:......:::..::::::::::::::::::::::----------------:::::::::::::::::::..:::::::::..................::::....................::::::......:::::::::----:::::::..............::
.::.........:....................................:::::::::::::::::::-------:--:::::----:::::::::::::-:::::::::::::::::..................................::.......................................................................................................:.:::.........:::::::::::..........................:::::::.......:::::::.......::::::-----------==============================---------------------------------------------------------------------------------======+++***888888##888+=-::::::::::::::---------------------=====---------:::::::::::.....:::.................................................................::::::::::::::::...:::::::::::::::::::::::---------------:::::::::::::::::::..::....................::::......................................::::::::::::::::::...........::::::
..........:::::......:...........................::::::::::::::::::::::----------:::--::::::::::::::::::::::::::::::::::.......................................................................::::::::::............................................................:::........::...::::::....:.........::::....................:::............::.......::------==============================--------------------------------------------------------------------------------=====++++****88888*+==--::::::-:::---::------===---------------------------:::::::::::...::::::.......................:::::..............::.................:::::::::::::::::::::::::::::::::::.::::::::-----------------::::::::::::::::::...........................................................::::::::::::::::-----:::::...........::::::
................................  ....................:::::::::::::::::::::::::::::::-:::--:::::::::::::::::::::::..::..:.................................   .. .....         ................::::::::::::::::::..................................................:.......:.....:::::::::.....::::::..............................................:::........::::----=-=============================---------------------------------------------------------------------------======++++++++=--:..:::-:::--:::::----------=----------------------:----:-:::::::::.....:::.............................:..............:::::................:::::::::::::::::::::::::::::::::::::::::::::::----------------:::::::::::::::::::......................................................::::::::::::::::::-::::::..................::
................................:.........................::::::::::::::::::::::::::::::---::::::::::::::::::::::::::.........................................     .....      ..................::::.....:::::::.................  .....   .................................:......::::..:...:...:::::.........:::...................................:::.......:..::::------======================----------------------------------------------------------------------------=========-:::....:::::-----::::-----:::-----=-------------------::::----::::::::::......::::...........................................:::::.....:....:::::::::::::::::::::::::::::::::::::::::::::::::::::------------------::::::::::::::::::................:::::::::::::::...................:::::::::::::::::::::::::::................::::::
............................................................:::::::::::::::::::-:::::::::::::::::::::::::::::::::::::..........................................           .    ........ ............:::::::........................ .         ..................................:::..::::::::......::.::::......:::.:.................................................:::::::::::----=================-------------------------------------------------------------------------:::::::::.:::::::--:---:----::-----------------------------:::::::-::::::::::::.....::::::....::::....................................:........::...:::::::::::::::::--::::::::::::::.........:::..:::::::::-----------------::::::::::::.............::::.:::::::::::::::::::....................::::::::::::::::::::::::.........::::::::::::::
................................................:::::.::::::::::::::::::::::::::::::---:::::::::::::::::::::::::..................   .. ..........................   .....    ............ ...........:::::....................................:..................................:::::::::::::.....................::::::..........:::....:::::..............:....::..::::::::::::::::::-------======--------------------:-------------------------------------------::::::::::::..:::::--:-------------------------------:-----------------:::::::::::::::....:::-:.........:::::::::::::::.......................::...:::::::::........:::::::::::-:::::::::::::::::::::::::::::::::::-------------------::::::::::::......................::....::::::::::::::::..:...::::::::::::::::::::::::::::::........::::::..::::::::
.................................:::.......:::::::::::::::::::::::::::::::::::::::----:::::::-::::::::::::::....:::................................................. ......   ......................................................................................................::.:::::::::.:......................::::........:::::...::..::........::.....:::::::::::::::::::::::::::::::::::::::-----------------:::--------------------------------:::::::::::::::::::::::::------:---:::--------------------------------:-----::::::::::::::::::::::::::::................:..........................................................:::::::::::::::::::::::::::::::::::::::::::::------------------::::::::::......................:::::::::::::::::::....:::...::::::::::::::::::::::::::::.........:::::...::::::::
................................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::::::::::::::::.............................. ....   .....  .......  ... ....  ..........::::..:::::::..................:::::...................    ......................:.........::::::::::::....::::..................::::::...::::.......:::::.......:...::::::::::::::::..::::::::::::::::::::::::..:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::--:--:---------------------------:------:::-----------::::::::::::::::::.::::::.....::...........................................::......................::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------::::::::::::...........................................:::::::::::::::::::::::::::::::::.........::::::::::::::::
............................................:::::::::::::::::::::::::::::::::::--:::::::::::----:::::::::::::::::::..............   .................             ...... .........................::.:::::::.....................................................................::........:::::::::::..::::......................................:::.::.................::::::::::.::::::::::::::::::::::::::::::::::.....::.:::::..:::::::::::::::::::::::::::::::---:::::-----------------::------------------:::::--------------:::::::::::::::::....:::::::...:::::::::::::::::::::::........................................:::.:::::::::::::-:::::::::::::::::::::::::::::::::::--:::::-------------------:::::::::::..........................................:::::::::::::::::::::::::::::::::...::::::::::::::::::::::
.................................   .............::::::::::::------::::::::::::::-::::::::::::::::::::::::::............................................                   .......................:::::::::::........................................................................:..::::.:::.::::::::::....:..::::::::::::...........:::::::::::..::.....::::::...:::....::::.::::::::::::::.:::::::::::::::::::::::::::::::::..::::::::::::::::::::::::::::::-------:-----::--------::------------:---:---:-------------------:::::::::::::::::::::--:::.::::.....:..:::..::::::...........................................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------------:::::::::..................................................::::::::::::------:::::::::::::::::.......:::::::::
.................................................::::::::::------:-------:::::::::::::::::::::::::::::::::::......................................................  . ............................::::::::::::.......................................  .... .................::::...:...::..::...::...::::..:::::::::::::::::::.::::::::.....::::.::::::::..:::::..::::::::..::::::::::::::::::::::::::::::::::::::::---::::::::::::--::::::::::-:::::::::::--::---------------:---::::------------------::::--------------------::::::::::::::...:::::::..............:...................................................:::::::::::::::::::::::::::::::::::::::::::::...:.......::::::::::::-------====------:::::::::::::.........................::::::.........:::::::::::::::::::------::::::::::::::.........:::::::::::
................................................:::::::::-----------------:::::::::::::::-::::::::::::.................................................... ....     .   ......  .....   .................::::::...............................................................::::::::::::..::........:::::::::::::::::::::::::::::::::::..........::::..:..:::::..................:::::::::::::::::::::::::::::::::::::::::::::--::-::::::::::---::::-::::--------------------:--------::::::::------::::--::-::-------------::::::::::::::..:::::::::...........................................................:::::::::.....:::::::::::::---:::---:::::::::::::::::::.........:::::::::::::--------===------::::::::::::...................::::::::::............:::::::::::::::::::::::::::::.................:::::::::::::
........................................::..::::::::::::-------:----------:::::---::--:-----:::::::::::....................................................................................::::::::....::...::.................................................::::...........:::::::::.:::::.............::::::::..:::::::::::::::::::::.........:...::::::::.::::.........:........::::::::::::::::::::::::::::::::::::::::::------:::--------------------------------:::--:::-::---::::::::::---::::::::::::::::::---------::::::::::::.::::-::::::::::::::....................................................::::.::::...:::::::::::::----------:::::::::::::::::::..........:::::::::::::::-------=--------::::::::::::................................:.......:::::::::::::::::::::::::::................::::::::::::::::
........        ........................::::::::::::::----:::---------:::::::--------:-::::::::::::::::::.............................................................................:::::::::::::::::::::::::::.........................................................::::::::::::::.......::..::..........::::::::::::::::::::::::::.:...........:.........::..::::::.........::::::::::::::::::-----::::----------:------------------::----:---:::---------------------:::-::::::::::::::::::::---::::::::::-------:::::::::::...:::::::::...::::..::::::::::...............................................:......:::::::::::::::::------::::::::::::::::....:...::::::....::::::::::::::::----====--------:::::::::::::::...................:::::::..........:::::::::::::::::::::::::::::::.::..........:::::::::::::::
...........          . ...................:::::::::::-----::----------::---::::::--:::::::::::::::::::::::::....................................  ...  ...............................:::::::::::::::::::::::::::............ ......................................::::.::::::::::::::..::::.....::..:::.........::::::::::::::::::::................................::::::::::::::::::::::::::::::::::::-:::--------::::----------------:::::::::------------------:::---::::-:::::::::--:::::--::--:----:::::-----::::::::::.......:::::.........::...:::::::::::::.........:::::.:::::::::::::::..................:::::::::::::::::::::----:::--:::::::::::.....:................:::::::::::::-----==--=------::::::::::::::::::.........:::::::::::.......::..::::::::::::::::::::::::::::::::.............::::::::::::..::
.............. ....... ...................::::::::::------------------:::::::::::::::::::::::::::::::.......................            .......................      .   ...................::::::::::::::::::.......................................................::..:::::::::::::............:...................::::::..::....:::::::............:.::::::.........::::::::::::::::.:::::::::::::::::-:::::::::::::::::::::::::::::::::::::::::::----::::::::::::---:---::----:::::::::::::::::::::::::--:----:::::::::.:...::::::::::..::......:::::::::::::::...........................................:::...::::::::::::::::::::-----:------::::::::::::::...........................:::::----==-----------:::::::::.........................................::::::::::::::::::::::::.................::............:::
..........................................:::::::::--------------:----:::::::::::::::::......:................................          ............................. .................................:::::...............................................::::::::::::::::.::::::::..:::........................:::::...:::::::.:......:::::::..........:::::::::::..::....::::::::.::::::::::::::.::::::::::::::::::::::::::::::::::-:::::::::::::::-::::::::::::::--:::-------::::::::::::::::::-:::::-----:::::::::::...::::::::::..::::::::::::::::::::::::::::::.:......................................:::...........:::::::::::::-------------:::::::::::.............:::.:::::........::::----=---=------------:::::::::.......................................::::::::::::::::::::::..............................::::
...............................::..:::.:::::::::::::::--------------------::::::::::::..................................................................:......................  .......................::..................................................:::::::::::::::::::::::::::::::::::................ .... .::::::...:::::::...:::::::::::::::.::..::::::::::::::..............:::::::::::::::::::::::::::::::::::::::--:---------:::::::::::::::::::::::::-::::::::::::::::::--:--::::-----------::::::::......::::::::........::::::::::::::::.................................................................:::::::::::------------::::::::::::::.............................::::::----=---=-------::-:::::::::::..:.................................:::::::::::::::::::::.....................:::::::::...:::::
...............................::::::::::::::::::::::----::::::::::::::--:::::::::::::........................................................................................................:::::::::..................................................::::::::::::::::::::::::::::::::::::::::::::..............  ...::.........:::::::--::::::::::::::::::::::::::::::::::::::::........::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----::::-------::::---::.....::.:::::................::::::::::::::::..........................................................::::::::::::::-----------------::-::::::::...............................:::::----------------:::::::::::::...:..........................:::::::::::::::::::::::::::..........:::......:::::::..:::::::::::
..  ......................::::::::::::::::---------------:::::::::::::::::::::::::::::::.....:................................................................................................:::::::::::::...................................................:::::::::::::::::::::::::::::::::::::::::........................::......::.::::-:::::::::::::::::::::::::::::::::::::::::......:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--::::::::::::-------::::::::.:..:::::::::::::::...::::::::::::::::::::::::::::::...................::::::.....................::.....::::.::::::::::-------------------::::::::........ ........................::::---------------:::::::::::::::::.................::...........::::::::::::::::::::..:::..........:::::::::::....::::::::::::
.........................::::::::::::::::----------------:----:::::::::::::::::::::::::::::::::::::...................................  .   ......................... .......................:::::..:::::::::.....................................................:::::::.........::::::::::::.:::::::::::::.......................:::::....:::::::::::::::::::::::..:::::::::::::::::::::.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----:::::---::::-------:::::::::.....::::::::::::::::::::::::::......:::::::::::::::::::::::::...................................................:::::::::::::::::::::-------------:::::::::::.............................::::::-----==---------:::::::::::::::.............................:::::::::::::::::::.............:::::::::::::::::::::::::::::::
.........................::::::::::::::::-------------:::::--:::---:::::::::::::::::::......::::::::.................................................................   ...    . ..........::::::::::..::::::......................................................:::::::::::.......::::.::::.::::::::::::::.....................:::..::::::::...::::::::::::::::....::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--:::::-::----------::--::::::::..::::::::::::::::::::::::::::::.......::::::::::::::.........:.........................................................:::::::::::::--------------::::::::::::::::::::.......................:::::------==-------:::::::::::::::................::..::::::::::::::::::::::::::::............:::::::::::::::::::::::::::::::::
:::::...:::::::::.....::.::::..:::::-----------:::--::--::::::::-:::::::::::::::::.............:::::::......................................... ..............   ......  .. ..............:::::::::::::::::::........................................................:::::::::::::::::.:...:::.::.:::::::::::::::::::.....................:::::::........:::::::.:........::::::..::::::::::::::::::::::::::::-::::::::::::::::.:::::::::::::::::::::::::::::::::::::::::::::::-----:::::::.....::::-::::::::::::::::::::::::::::........:::::::::::::....................................................................:::::::::-----------------:::::::::............................::::::::::::---------------::::::::::::::::..................................::.:::::.......:..::::::::::::::::::::::::::::::::::::::::
......::::::::::::..::::..::::::::::-------:::::::-------::--:::::::::::::::::::::::........................................................::...............................................:::::::::::::::::::...............................................................:.......::.....::::::::::::...........::.......::..............::.::::::::.....::...::::::....:::.:::..::::::::::::::::::::::::::::::::::--::::::::::::::::::::::::::::::::::::::::::::-----:::::::::::..:::::::::::::::::::::::::-::::::::..........::::::::::::::::::............................................................:...::..:::::-------------------::::::::::.............................::::::::::------------------:::::::.:...........................................::::::::...:::::::::::::::::::..........:::::::::::::::
...........::::::::::::::::::::::--------::-::::::::----::-----::::::::::::::::::::::::........................................................:::::::..........  ........................:...::::::::::::::::................::::::.................................:::..............:............::.::::...::.....::::::::::::::::::............:..:::::::::::::::::.:.::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::::::::-:::::::--:::::::::::::::::..:::-::::::::::::..::::::::::::::-:::::::::::::::::.::::::::::::::::::..........................................................:::..:::::::::::::::-----------:::::::..::..................................::::::::------------------:::::::::::..................................::::::::::::::::..:::::::::::::............::::::::::::::::::
..::.................:::::::::::::::---::::---:--:--:::::::::::--::::::::::::::::::::::...................................................  ......................... ...................::::::::::::::::::::::.:................::::...............................:::::::::...............................:...:::::::..:::::::::::::::.................::::::::-:::::::::...::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.::.::::::::::::::::..::::::.::::::::::::::::----::::::::::::::::..::::::::::::::::::...............................................................:::::::::::::------------::::::::........  .............................:::::::----------=------::::::::::::...................................:::::::::.:::::::...........:....::::::::::::::::::::::::::
:::::..:::::::....:.......:::::::::::::::----------::::::::::::::::::::::::::::..........................................................................................................::::::::::::::::::::::::::.................................................::::::::::::.::::..::......................::::::::::::::::::.:::::::::::::::::..........:::::.::::::::::::::::::::::.:.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::....::::::::::::::::-:::::...........:::::::::::::::::--::-:::::::::::::::..:::..:::::::::::::::::......................................................::........:::::::::::-------------::::::::........       .........................::::::::-------=-------:::::::::::::::::::::::::::::::::::::::::::::::::::::::..............:::.:::::::::::::::::::::::::::::::::
.....::::::::::::::::::::::::::::::::::::---------:::::::::::::::::::::::::::::..........................................  ...............................................................:::::::::::::::::::::.......................................................::::::::::::::::::::.....:....................::::::::::::::::::::::::::::::.............:....:...:..:::::::::::::::::::::::::::::::::..::::::..::....::::::.......::::::::::::::::::-:::::::::::.:::::::.....::.:::::::::::::--::--------::::::::::................::::::::::::...........................................................:::::::::::::::---------------:::::::::..........    .........................:::::----------==-----:::::::::::::::.::::::::..:::....:::::::::::::::::::::::::::::::::::::::::.....:..:::::.......:...:::::::::
....:::::::::::::::::----:::::::::::::::::::::----::---:::::::::::......:::::::::............................................  ..   ...............       .............::.............::::::::::::::::::::::::........... .......................................:::::::::::::::::::::::::....:::::::::::::.....::::::::::.::::::::::::::....::::::::.........::...................::...:::::.::-::-::::::-:::-------::::::::::::::::::::::::::::::::::::::::.:. ........:::::::::::::::::::::--::----:-----::--::::::::::..............:::::::::::::::::......................................................:::::::::::::::---------------:::::::::::.....................................:::::::-------=--=-----:::::::::::::::::::::::::::::::...:::::::::.......::..............:::::::::.....:::..:............:::::::...
:::::......::::::::::::::::--::::::::--::::::::::::--:::::::::::::::.......::::::..................................................  ....................     .  ..................:::::::::::::::::::::::::::::::.............................................::::::::::::::::::::::::::....................:.....:.::::::::::::::::::::::.................:::::...::..........:..:..........::...:..:::.::.:::.:::::::::::::::::::::::::::::::::..:...:..:........:::::::::::::::::---:::::---------:--:::::::::::::::....::.......::::::::::::::::::::::..:...:::.........................................:::::::::::::::-----------------::::::::::........................................:::::::--------------::::::::::::::::::::::::::::::::::::::::::::::::::::::..:..:............:::.:::..:::..............:::::::...
:::::::::..:::::::::::::::::::::::------:::--:::::::::::::::::::::::::::...::...:::::::::::........................................................................................:::::::::::::::::::::::::::::::::::::::::::...... .............................::::::::::::::::::::::::::::..........................::::::::::::::::::::::::::::::::::..:......:::::..:::.:::::::::::::::::::::....:..:...::..::.....:::...........:::::::::::::::::::.:::....:::::::::::::::::::::---------:::::::::::::::...::::::::::::::::::::::::::::::::::......................... ....................................::::::::::----------------:::::::::::::......................................::::::::----====-----:::::::::::::::::::::::::::...::....:::::::::::::::::::::::::::::::::..............:::::.........::::::::...
....::::::::::::::::::::::::::::::::::-:::--------:::::::::::::::::::::.........::::::....::::.............................................................................................::::::::::::::::::....::...........::::............   .......................:::::::::::::::::::::::::::::::......................::::::::::::::::::::::::::::::::::::::::.:...........:::::::::::::::::::::::::...:::::::.....:.............:::::::::::::::::::::::::::::::::::::::::::::--::::::::::::::::::::::...................:::::::::::::::::::::::::....................................................::::::::::::::------------------::-::::::::.............................:.:::::::::::::::-----====-----:::::::::::::::::::.:::::::..........:.....::.::::::::::::::::::::::::::::....::::...............:::::.:::::
::::::::.:::::::::::..:::::::::::::::::::------------::::::::::::...::.................................................................................   ..   .............................:::::::::::::::::::................................  ..............................::::::::::::::::::::::::...........................::::::::::::::::::::::::::::::::::::::::::::::::::::::::::..::................::::::::::::::::::::..::::::::::::::::::::::::::::::::::::::::::-::::---::::::::::::::::::::........................:::::::::::::..........................................................:::::::::::::--------------------::::::::::::...............................:::::::::::::::-----======---::::::::::::::::::::::::::::::::.................::::::...............::::::....................::::::::::::

400 columns

                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                          ...         .....                                                                                                                                                                                                     
                                                                                                                                                                  . ..  .:::-::::..::-====-:  ..:-:---::::::....  .                                                                                                                                                                                             
                                                                                                                                                        .:.:---=---===+++=+++*8888888888**8888888***888888****+==-:.                                                                                                                                                                                            
                                                                                                                                               .:::--==*****88**88888*****88888*88*88888################%%%%##88****++===-:.                                                                                                                                                                                    
                                                                                                                               . . .. .::--=+++++****8*888###8888888888888888888##888***88##############%#############888888***+++++==-:...                                                                                                                                                                     
                                                                                                                 .     .:... .:----==+***888****888888####8#8888888##888***88#######%%%%%%%######%%%%%%%%%%%%%######################888*+==--..                                                                                                                                                                 
                                                                                                              . :.::::::::--++++*****8888888888#88#8###88888888888888888####%##%%%%%%%%%%####%%%%###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88*+=-:..                                                                                                                                                           
                                                                                                          .. ..:.:==+*8###%%%####88888888########8888#######8##88888888##%%%%%%%%################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%##%####88###88*+=--:..                                                                                                                                                    
                                                                                                          ::..::=8##%%%%%%%########888*8888888######8###88888#########88##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%########*+=-:.                                                                                                                                                  
                                                                                             .     . ..  .:::-*8#%%%%%%%%%%%#%##########88###########%%###%%%%%%%%##8#########88###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####%##%%%#%#%#####8*=:..     .                                                                                                                                          
                                                                                                    ...:::=+*8##%%%%%%%%%%%%##%%%%%%%%%%%%#%%##%%%%%%#########8888888888888######%%%%%%%%#####%%###8########%%#######%####%%%%%%#############################8+=---:...                                                                                                                                         
                                                                                              ....::-=+++*88##%%%%%%%%%%%%%%%%%###%%%%%%%%%%%%%%%%%%%%#####88#88*****888####%%%%%%%%%%%%%%%%%%%####%%%%%%%%%%%%%%#%%%#%%%%%%%%%%#%%%%%%%%%%%%%#################8*++=-:..  .                                                                                                                                     
                                                                                           ..:.::--+8*88####%%%%%%%%%%#%%%%%####%%#%%%%%%%%%%%%%%###%%%######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%%%%#%%%%%%%%%%%%%%%%%%###%##%%%%%%%%%%%################8*+=-:                                                                                                                                       
                                                                              .         .:::--=+***#888###%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####88##########%%%@@@@@%%%%%%%#%#%%%%%%%%%%%%%%%%%##88888##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%################88*+-:.                                                                                                                                   
                                                                               .     ..:--==+***8########%%%%%%%%%%%%%%#%%%##%%@@@%%%%%%%%%%%%%####888#####%%%%%%%%%%%%@%%%%%%%%%%%%######%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%%%%%@%%%%%@@@@%%%%%%%%%%%%%%%##%%#%%%%%#######88*=:                                                                                                                                 
                                                                           .     :...=++*888######8####%%%%%%%%%##%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%#######%%%%##################%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@%@%@@%@@%%%%%%%%%%%%@@@@%%@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%#####88+=-.                                                                                                                             
                                                                              .:-=++*8**88##8888#####%%%%%%%%%%%%#%%%%%#%%%%%%%%%%%%%######%%%%%########888****88####%%%%%%%%%%%%%%%%%%%%%%%%%%%%#%########%%%%%%%%%%%%%%@@@@@@%%%%%@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####88+=.                                                                                                                           
                                                                        .::-=++++*888888###########%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%###########888##88888888888***888#####%##%%%%####%######%######%%####8#######%%%############%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####8=-::.                                                                                                                      
                                                                        -==:=+++*################%%##%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%##888888*****8888##88#################%%#%#######8########8##%%%%%%%############8##8888#######%%%%##%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%######8*+=:                                                                                                                     
                                                                        .-=+-*++8#############%%%%%%%%%%%%%%%%%%%#%%%%%%%%%%%%%######8888888#####88888888***8888##%%%%#######%%%%%%%%%####%%%%%%%%%%%%%%%%%%%%%%%#%%%%%#######%%%##%%%#####%%%%%##%%%%%%%%%%%%%%%%%%%%%%%#%#%%#########88*=-::                                                                                                                  
                                                                         .=+*+88##############%%%%%%%%##%%###%%%%%#%%###%%%%%%%%%%%%%%%###8888888#8#%#8####%%%%%%%%%@@@@%%########%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########%######8888*+-:.                                                                                                                
                                                                     ....:-=+*8888#88###########%%%#%%%%%%####%%%%%%%%%%#%%%%%%%%%%%%%%@@@@@@%%%%%%@@@%%%%%%%%%%%%%%%%%%%%%%%%###########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#############888*+-:                                                                                                               
                                                                         .::++****8888#######%%%%%%%##%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%@@%%%%@%%%%%%%%%%%#%%%%%%%%###%%%%%%%%########%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########88*-:.                                                                                                             
                                                                          ..:-=+8**88#####8####%%#%%%%%%%%%%%%%%%%%%%%#%%%%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########%#####%%#################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########8+-::                                                                                                          
                                                                  .       ...::==***8888##88####%%#########%%%%%%%%@%%%#%%%%%%%%%%%%%%%%###%%#######################8###%#################################%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#######8*=:.                                                                                                       
                                                                            .. .-+****88888888##############8###%%%%%%%%%%%%%%%%##############8888888888888888888888888#####################################%%%%%%%%%%##%%%%%%%%%%%%@@@%@@%@@@@@@@@@@@@@@@@@@@@%%@%%%%%%%%%%%%%%%%%%%%%%%%%##%%#######8*=:.                                                                                                     
                                                                  .             ::=+*+**888*88*8888#############%%%@%%%%%%%%%%##8888888888888888888888*8888888888888888888888888########88##888888#################%%%%%####%%%%%%%@%%%%%@%@@%@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@%%%%%@@@%%%%%%%%%%%%######88*=-.                                                                                                   
                                                                               :.::-=*******8888#88*88##########%%#%%%%%%%%##88*88888888888*****++++++*************888888888888*888***88888888888888888888#######88######%%####%%%%%%%%%@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%###88*=--::                                                                                                 
                                                                              .  ::::=+=****88888888*8*888#%####%#%%%%%%%#888**********************++++++++++++++++++++++*+++++++++++**++******88888**88888888#####8888############%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%####8*=-::                                                                                                
                                                                              .    .:::+++++*8*88888888888###%######%%##888******++++++++++++++++*******++++++++++++++++=======---=========+++++++************8888888888888888888888###%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%###8*=-:.                                                                                               
                                                                             :       -:-=+*=-++**8888#88888#########88*****++++++++=================++++++++====--------------------------=====++=+++++***++++*****888*****8888*******88###%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%##%%####8*-:                                                                                               
                                                                             .       .:.-=+++==+*8888###88888#####88**+=++=------=------------------::::-:--:::::::::::::----::::-------------========++++++++++++************************88###%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%#######8+-.                                                                                              
                                                                            ..    .   :::-====+*8888#8#####8*8##8*+++++++=---------:::::::::::::::::::::::::::::::::::::::::::::::::------------------======++++++++++***********************888#####%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%#######*-.                                                                                             
                                                                            ..        .::-:-**88#########%%%#8**++++++++==-::::--:::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------====+++++=====+++++***************8888###%%%%%@@@@@@@@@@@@@@%@@@%@@@@@@@@%@@@@@@@@@@@@%%%%%%%%%#####8+-.                                                                                          
                                                                            ..      .. :--++888############8***+++====----:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------==========----=-=-=====+++++++**********888###%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@%%%%%%%%%%%%%%####8=:                                                                                          
                                                                            .      ..:::=-+88############8*+++++++=---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-----------------------====-------==--==--==============+++++**8###%%#%%%%%%%%%%%%%%%%%%%%%@%@@@@%%@%@@@%%%%%%%%%%%%%%%%##*-:                                                                                         
                                                                            .       ....:*#############8+==+=======--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:::----------------------------------------==============++++++***88#####%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@%%%%%%%%%%%%%##8+-                                                                                        
                                                                                      ..=*####%######8+------------:::::::::::::::::::::::::::::::::::::::::::....::::::::::::::::::::::::::-----------------------------------------===============++++++****8888##%%%%%%%%%%%%%%%%%%%%@@@@@@%%%%%@@%@@%%%%%%%%%%%##8*+-:                                                                                      
                                                                                     :.-+8%%#%###88#*=-------:::::::::::::::::::::::::::::::::::::::::::::::::.......:::::::::::::::-::::-------------------------------------------===============++++++++***8888888###%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%%%%###*=--.                                                                                    
                                                                                      .=*########88+-----::::::::::::::::::::::::::::::::::::::::::::::::::::::...:::::::::::::::::::::::::----------------------------------------=============+===+++*+******8888#88####%%%%%#%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%##*=:.                                                                                    
                                                                                      :=8#%88###8*=------:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------------=-----===================+++++++++*******8888888#####%%%%%%%%%%%###8##%#%%%%%%%%%%%%%%%%%%%%%%%%%###+-.                                                                                   
                                                                                      .=8#888#88+----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::------------------------------==========--==============+++++++********88888888####%#%%%%%##%%%%%###%###%%%%%%%%%%%%%%%%%%%%%%%%%###+-:.                                                                                 
                                                                                       =888*888+-:---:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-------------------------------==========================+++++++++******88888888#####%%%%%%%%#%%%%%%#%%%%#%%%@%%%%%%%%%%%%%%%%%%%%%%%#*+-:                                                                                
                                                                                      .-*8=+*8*-:----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:------------------------------=======================++++++++++++******8888888#8####%%%%%%%%%%%%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*=.                                                                               
                                                                                      :.=++==+---:--::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:--------------------------============================++++++*+++********888888#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@%%%%%%%%%%%%%##8-.                                                                              
                                                                                      . :=-==--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-::---------------------------==========================++++++++*********8888888888#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@%%%%%%%%%%%##8+-.                                                                             
                                                                                      . .--=-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::----------------------------==========================+==+++++*************888888888######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%##%%8=-.                                                                             
                                                                                         ---:-::::::::::::::::::::::::::::::::::::::::::::::::::::::..:::::::::::::::::::::::::::::------------------------------===========================+++++++********88888888888888####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@%%%%%%%%%%%%%%%%%%8-::.                                                                           
                                                                                         .:---::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------=============================++++++++****888888888888#88888####%%%%%%%%%%%%%@%%%%%%%%@@%%%%%%@@@%%%%@%%%%%%%%%%#8=-.                                                                            
                                                                                         .:-::---:::::::::::::::::::::::::::::::::::::::::::::::::::::::.:::::::::::::::::::::::::---------------------------=-==============================++++++*******888888##########88#%%%%%%%%%%%%%%%@@%%%%%%%@@%%%%%%%@%%%%%@@%%%%%%%%%%#*-..                                                                           
                                                                                         :-----::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--------------------------------===============================+++++++++*****8888################%%%%%%%%%%#%%%%%%%%%@@%@@%@%%%%%@@%%@%%%%%%%%%%%%%#8=-                                                                            
                                                                                        :-::---::::::::::::::::::::::::::::::::::::::::::::::::::::::-:-::--::---:::-::------===-----------===========--------===============================+++++++++*****8888###############%%%%%%%%%%%%%%%%%%%%@%%@@%%@%%@%@@%%@%%%%%%%%%%%%%##*-:                                                                           
                                                                                       ::---------:----::::::::::::::::::::::::::::::-:::---:-:-----===-==---=--===-========+++++++++++++++++++++++++++++===---==========================+==++++++++++*****888888############%%%%%%@@@%%%%%%%%%%%%@%%@@%%@%%@%@@%%@@@%%%%%%%%%%%##*-                                                                            
                                                                                      :::--------------::::::::::::::::::::::::::::::--:-------===++++=++++++++*++********8*8*88******888*8*******++++++*++++++==============================+++++++++++***888888#######%%%%%%#%%%%@@@@%@%%%%%%%%#%%%@@%%@%%@@@@%#%@@%%%%%%%%@%###*=.                                                                           
                                                                                     .:::---------------:::::::::::::::::::::::::::::=--=-===-===***+**8***888**88888888#######8888888888888888888888*************+======================++=++++++++++++****888888######%%%%%%%%%%%%@@@@@%%%%%%%%%%%%@@%%@%%@%@@%#@@@@%%%%%%%%%%##8=:                                                                           
                                                                                    .-------------=------:::::::::-::::::-:::-::::::--=-==+===+*88888*88888888#8#####################888888888888888888###88##8888888*++====+++++======+++++++++++++++++****888888####%%%%%%%%%%%%%%@@@@@%%%%%%%@@%%@@%%%@%%@@@@%%%@@@%%%@%%%%%%%#8=.                                                                           
                                                                                   .------===-=--======---::::::::----::------::::::--=+=+*++*888#888##8888##############%###########8888888888888*88#################88**+==+++++++==+++++++++++++++++++****8888####%%%%%%%%%%%%%%%@@@@@@@%%%@%%%%%%%%@%@%%@@@@%%@@%%%%%@@%%@%%%#8+-                                                                           
                                                                                  :-=======+++=+===++==----:::::::-------::--::::::---++*****88####8#######%##%###%%%%%%%%%%%####888888****************888888###########888*++++++++++++++++++++++++++++++++**888#####%%%%#%%%%%%%%%%@@@@@@@%@@%%%%%%%@@@@%%@@@@%@@@%%%@%%%%%@%%%%#8=..                                                                         
                                                                                :-===+++++++*****+=***+==---::-::--------------:----==+****88888###########%%%%%%%%%%%%%%%#%##888***++++++++++++++****++++++***888888888888888**+++++++++++++++++++++++++++++**88######%%%%%%%%%%%%%%@@@@@@%%@@%%%%%%%@@@@%%@%@@@%@@%%%@%%%%%@%%%%%#*-..                                                                        
                                                                               :+++**88888888888**8***++==---::::---------------=--==+*+**8#888#8####%####%%%%%%%%%%%#%%####888****++++++++++++++++++++++++++++***888##8888888888**+++++++++++++++++++++++++***8#8######%%%%%%%%%%%%%@@@@@@%@@@%%%%@%%%@@%%@@@@@@@@@%%%@%%%%%%%%%%%%*=-.                                                                        
                                                                             .=*88888#######88#888888*+++=------:----------------==-=+****888#8######%%%%%%%%%%%%########888888******+++**+++++++++++++++++++++++++****88888888888***+*+++++++++++++++++++++***8#8####%#%%%%%%%%%%%%%@@@@@@@@@@@@%@@%%%%@%%@@@%@%@@@@%%%@%%%%@%%%%%%*-:..                                                                       
                                                                            -*88#8###########8####8888*++===---------:::::------==+==+*+**8#########%#%%%%%%#%##########8888888888888888**************+++++++++**********88888888888*****+++++++++++++++++*****888####%%%%%%%%%%%%%@@@@@@@%%%@@@@@@@%%%@%#%@@@@@%%@@@%%%@%#%%@%%%%%%8--                                                                         
                                                                           :*88###%%%#############88888*+==-----------::-:--------=+++***888#################################8888888888888888888888*********+**++*********8888888888888*****+++++++++++++******8######%%%%%%%%%%%%@@@@@@@%%%%%%@@@@@%%@%%#@@@%%%%%%%@@@@@@##%%@%%%%%#=:.                                                                        
                                                                           +88###8#################88**8*+==-----:::::::::::------==++**888*8#8##############################################888888888**********************8888####88888*****+++++++++++******88######%%%%%%%%%%%%%@@@%%%%#%%%@@@@@%%@%%%@%@%%%%@%%@@%@@@%#%@@%%%#%#+=-:                                                                       
                                                                          =8888*****8################8****+=----:::-::::::::::----====+***88888888##88888#8##############%%%%%%%%%%%%%%%%%%%%%%%%##8888888*****************888888888#888888***+++++++++++++++***8######%%%%%%%%%%%%%%@%%%%%#%%%@@@@@%%@%%%@%%%@%%%%%%@@@@%%#%%%%%%##8-...                                                                       
                                                                          =8*+++++=+++**888#########88888*+=----::::::::::::::----===++***88888888888888#################%%%%%##888********8888###%%%##888888************8888888888888888888***++++++++++++++****#######%%%%%%%%%%%%%%%%%%#%%%%%@@%%%%@@%%@%%%%%%@@%%@@@@%%#%%%%%%%#+:                                                                          
                                                                          :*+====++++++****88888888888888**+=----:::::::::::------==++++**88888888888888##8###########%%%%###88++++======-----===++**8#####888************8888888888888888888**++++++++++++++*****8####%%%%%%%%%%%%%%%%%%%#%%%%%%%%%@@@%%%@%%%%%%@%@@@@@@%%%%%%%%%#8=:                                                                          
                                                                           +======++++******88888888888888*+==---::::::::::::-----==+++***88888888888888############%%%%#8#8***8++*+--=================++*8##888************88888888888*********+++++++++++++******8#%%%%%%%%%%%%%%#%%%%%%%%%%%%%%%@@%%%%%%%%%%%%%%@@@@@%%%%#%%%%%#+-                                                                           
                                                                           -+===+++++*******88888888888888***=---::::::::::::-----==+++***8888888888888#####################%#%#%%#%#***8**=--=======++==+++*888********************************++++++++++**********###%%%%%%%%%%%%#%%%%%%%%%%%%@@@@@@%%%%#%%%%%%%@@@@@@@%@%%%%%%##+.                                                                           
                                                                            :===++++*****888888##########888*+--::::::::::::::----==++***888888888888888############888########%%%%%%%######8***+=====+++++++++*88**************+++***********+*++++++++++***********##%##%%%%%%##8%%%%%%%%%%%%%@@@@%%%%@%%%@@@@%@@@@@@@@@%@%%%%%##+                                                                            
                                                                             :==++++****8888##%#######%%%%%##*-:::::::::::::----===+++**88888888888888888#8#888##8***88####%@@@@%%%%%%#8**8#######88*++++++*+++++*************+++++++++++****++++++++++++++*****+****8#%###%%%%%###%#%%%%%%%%%%%@@%@@@@@@%%%@@@@@@@@@@@@@@%%%%%%%#8-                                                                            
                                                                              :==++****8888#8*++++++**88#####8::::::::::::::---====++**88888888888888888888888****888888#%%%%%%%%#*8#%##8+=+****8##%%##888*******+++++++++++++++++++++++++++++++++++++++++++++++++++***##8#########%8%%%%%#%%%%@@%%@@@@@%@%%@@@@@@@@@@@%@%%@%%%#%%#-                                                                            
                                                                               -=++*8**8##8**+*++=====+++**88=::::::::::::-----===++***8888888*************++++++**888888%%%%@%%%8=*####8+===++****8####%####888***+++++++++++++++++++++++++++++++++++++++++++++++++****888########%#%%%%%#%%%%@@%%@@@@%%%@@@@@@@@@@@@@%@%@@%%%#%%#*                                                                            
                                                                             ..:-+**88888#%%%%%%####88*++++=-::::::::::::-----===+++****88***++++++++++++=====++*88888++8#%#%@%@@%##8888*=---==++++++*8888####88888***++++++++++++++++++==+++++++++++++++++++++++++++****88888##%%%%%%%%%%#%%%%@@%@@@@@%%@@@@@@@@@@@@@@@@@@@%%##%%%+                                                                            
                                                                               :-=*88###%##8#%%%%%%%#8888*=::::::::::::::-----===+++******++++++==+++++==-----+88##88*=-88##%%%%@%##888*+-------==+++++****88888888******+++++++===============++++++++++++++++++++++++******8##%%%%%%%%%%%%%@@@%%@@%@%%%@@@@@@@@@@@@@@%@@@@%%##%%%:                                                                            
                                                                                .:-=*8###8##%%%%%%%%#*----::::::::::::::----=====+++*****+++++=========---=+**88888*+=--+88####%%####8+=----------====+****************++++++++=================++==+===+++++++++++++++++****88#%%%%%%%%%%#%%@@%%@@%%@%%@@@@@@@@@@@@@@@%@@@%%%###%#:                                                                            
                                                                            ..:::::-+8#%###%%%@@@%%#8=::::::::::::::::::-----====++++***++++++==---------=+8#8*=-=+++=---=*8#######88+------------====++++*********+++++++++++============================++++++++++++++++***88###%%%%%%%%#%%@@%@@@@@%%%@%%@%@@@@@@@@@@%%@@%%%###%8:                                                                            
                                                                            .:::--==+*88#####%@@%@%#8+:::::::::::::::::------====++++++++++++===-----==-=====+===+==+++++++++***+++==---==-===-====++++*++****888**++++++++=====---==-----==================+++++++++++++++**88###%%%%%%%%%%@@@@@@@@@%%@@%%%%@@@@@@@@@%@@@@%%%%%%#*.                                                                            
                                                                                ...:-=*88#**#%%%%%##*-::::::::::::::::-------===+++++++++++++=====--==---------======++++++++++++++++++++=++++++++++++*************++++++=======-----------===============+==++++++++++++++**8#####%%%%%%%%%@@%@@%@@@@@@%%@%@@@@@@@%@@@@@@%%######*:                                                                            
                                                                             ..::----::=**++8######*-:::::::::::::::::-------===+++++++++++++++=======--------====++++++++++++++++++++++=+====++++++++*******++++++++++=======---------------==============+=++++++++++++++**8####%%%%%%%%%@@%@@%%%%%@@@@%%%@@@%@%@%%#8*+=======+++-:                                                                           
                                                                                     .::==+=*8888*+-::::::::::::::::::::-----===+++++++++++++++========-------=====++++++++===++==============+++++++++++++++++++=========-------------------===============++++++++++++++****8###%%%%%%%%%@%%@@%%%@@@@@%%%@@%%%#8*++==---====++++++=:                                                                          
                                                                                    .-=+**88**++++-:::::::::::::::::::::-----===++++++++++++++=========---------======+++++++++++=++==+++======+++++++++++++++++=========--------------------==============+==++++++++++++****88###%%%%%%%@%%@%%%%@@@@@@%@%%%%%8*+=====-==+**8888**++++-                                                                        
                                                                                   .--=-+++++++++-::::::::::::::::::::------===+++++++++++++++++========----------==-=======+++=+++============++++++++++++=+========------------------------=============+++++++++++++++++***88##%%%%%%%%%%%@%%%%@@@@@@@@%%##*+=======+*888##888888****=                                                                       
                                                                                  .:... -==+==++=::::::::::::::::::::------===+++++++++++++++++++=======-----:---------------==================================------------------------------============++++++++++++++++++***88##%%%%%%%%%%%%%%%%@%@@@@@%%#8*+====+*888888888888888888**+:                                                                     
                                                                                        .===++++-::::::::::::::::::-------====+++++++++++++++++++=======------:::::-------------------------------------===----------------------=----------============++++++++++++++++*****88##%%%%%%%%%%%%%%%%%@@@@%%%#8**+++++*8#8888888888888888888+++.                                                                    
                                                                                         -====++-::::::::::::::::::------====++++++++++++*+++++++=======-----:::::::::-:::--::::::::::::::--:---------------------------::-:----------------==========+++++++++++++++++*****88##%%@@@%%%%@%%%%%%%%@%%%##88**+++**8##8888888888888888888*=++=                                                                    
                                                                                         --=====:::::::::::::::::--------====++++++++++++++++++++=======-----::::::::::::::::::::::::::::::::::-::----------:-::::--::::::::-----------------========++++++++++++++++******8##%%%%%%%%%%%%%%%%%%%%%##88888**++*8##8888888*8888888888888*+=++                                                                    
                                                                                        .--=====:::::::::::::::-------=====+++++++++++++++++++++++======------:::::::::::::::::::::::-:-::::::::----:------::::::::::::::::-::-------------=========+++++++++++++*********8##%%%%%%%%%%%%%%%#%####88888888****88888888**********88888**+==++.                                                                   
                                                                                        .-------:::::::::::::::------=====+++++++++++++++++++++++=======-----::::::::::::::::::::::::----:::::::-:::::::::::-:::::::::::::::------------==========+++++++++++**********888####%%%%%%%%%%%%#######888888888***88888888****++++++******+++===+:                                                                   
                                                                                        ::-----:::::::::::::::-------=====+++++**++**+++++++++++=======------:::::::::::::::::::::::::::::::::--:::::::::::---:::::::::::---------------==========++++++**************888#####%###%%%%%%%##8888888888888888888888888***+=====+++***+++===-=+:                                                                   
                                                                                       .::----:::::::::::::::-------======++++*********+++++++++======-------:::::::::::::::::::::::::::::::::::-:::::::::-::-----:-:::::----=----------=======++++++***********88**88888#################88888888888888888##88*****+==-----==++**+++===--=+:                                                                   
                                                                                      .::-::::::::::::::::::---------====++++***********++++++=========------::::::::::::::::--::::::::::::::::::::::--::::::::---:----------==----===========++++++***********8888888888888########888#888888888888888888##%##8*++=--------=++****++==---=+:                                                                   
                                                                                      :::--:::::::::::..::::--------====+++++**********+++++++=========-----::::::::::::::::-::-:::::-:::::::::::::::------::--------------------=======+====++++++********8888888888888888888888888888888888888888888888#######8*+=--------=++****++=---=+*                                                                    
                                                                                      :---:::-:-::::::.::::::-------====++++***********++++++++=======------::::::::::::::::::::-:::::::---:::::--:::------------------------=============+++++++****8*888888888888888888888888888888888888888888888888##########8*+==------==+****+=----=+=                                                                    
                                                                                     ::--::-:-:::::...::::::--------====++++**********+++++++++======-------:::::::::::::::::::::::::::::::::::------------------------------============+++++++****888888888888888888888888888888888888888888888888888#########88*+==-------=+****+=---=+-                                                                     
                                                                                     ::-:::::::::......::::---------====++++++++++++++++++++++++++===------::::::::::::::::::::::::::::::::---------------------------------===========++++++++****8888888888888888888888888888888888888888888*******888888888888*++==-------==+**++--:-=-                                                                      
                                                                                    .::::--::::::......::::-------======++++++++++++++++++++++++++===------::::::::::::::::::::::::::::::::::::----------------------===============++++++++++***88888888888888888888888888888888888888888888***++++*88888888888**++==----:--==+**+=-::=-                                                                       
                                                                                    .-::---:::::::...:::----------=====+=++++++++++==++++++++****++==-----:::::::::::::::::::::::::::::::::::--------:-------------=---===========+++++++++****888888888888888888888888888888888888888888888***+++++*8888888****++++=----:::-==***+=----                                                                        
                                                                                    .::-----::::-::::--------=======+++++++++++++++===++++++++****++==---:::::::::::::::::::::::::::::::::::::::::---------------------==========++++++++++****8888888888888888888888888888888888888888888***++====+*88********+====-----:::-=+***+--=.                                                                         
                                                                                     :----------------=======+++++++++++++++++++++++++++++++++*****++==---::::::::::::::::::::::::::::::::::::::--::------------------===========+++++++******88888888888888888888888888**8********8*******++++==++*8888******++==---:::::::-=**8+---                                                                           
                                                                                     :--------===========++++++*****************++++++++++++++***8**++=---:::::::::::::::::-::::::::::::::::::::::::-::--------=------===========+++++++****8888888888888888888888***********************+++=+++**888888***+++==---::::::::-=+88*=--                                                                            
                                                                                     :-----=============+++++***************************+********88*++==--:::::::::::::::::::::::::::::::::::::::-:-------------------=========+=++++++*****888888888888888888888**********************+++==++*888888888**++===--::::::::::-+888+-.                                                                             
                                                                                     ::---====+++++++++++++++*****88888###########888********8***888*+=--:::::::::::::::::::::::::::::::::::::::::-------------------============+++++******88888888888888888*************************++===+*8888888888***+==--:::--:::::--+888+:                                                                               
                                                                                      :----==+++++*+++**+*****88#%%%%%%%%%%%@@@@@@%%%#88888888888888*+--::::::::::::::::::::::::::::::::::::::::::-----------------==============+++++******8888888888888****************************++==+*8888888888888***==--------::--=+88*=.                                                                                
                                                                                      .---::-=+**************8%%%%###########%%%%%%####8888888888#88*+-::::::::::::::::::::::::::::::::::::::::--------------------==========+++++++++******88888888*********************************++=+*888888888***++=======--------=+*88+:                                                                                  
                                                                                       :::::::--=++*********88888###888888888888####88#88888######88*=-::::::::::::::::::::::::::::::::::::::--:------------------===========+++++++++***********************************************+++**++=======-----============++**88*:                                                                                    
                                                                                       .::::::--::---=+++*****88888888888888888888##############888*+-:::::::::::::::::::::::::::::::::::-------------------------============+++++++++**************************************************+=----::::---===+++*********8**+=.                                                                                     
                                                                                        :::::---------=++++****888888888888888888#########8888888**+--:::::::::::::::::::::::::::::::::::-------------------------=============+++++++++****************************************8*******+==--------===+******888***++===:                                                                                       
                                                                                        :::::---------=+++****888888888888888888#8888888888888**+=--::::::::::::::::::::::::::::::::::::::----------------------===============+++++++++**********************8***************888******+=---------===+****8888**+=-----.                                                                                        
                                                                                        :::::---------=++++**8888888888888888888##88888888**++==--::::::::::::::::::::::::::::::-:------------------------------===============++++++++++++************************88888*88***********=---------==+********++++=--==-.                                                                                          
                                                                                        ::::-----------=+++**88888888888888888888888***+++===---::::::::::::::::::::::::::::::::-------------------------------================++++++++++++***********************88888888*********8*=--:::------=========-----====.                                                                                            
                                                                                        :::-------------=++**88888888888888888****+++====-----::::::::::::::::::::::::::::::::::-----------------------------===================++++++++*++**+++++++************88888888888888*8888*+-------------------------==:                                                                                               
                                                                                        ::--------------==++**8888888888888***++++====-----------::::::::::::::::::::----::::----------------------------==-====================+++++++++++++++*++**************8888888888888888888*+-----------------------==+.                                                                                                
                                                                                        .----------------===++************++++========-------------::-----------::-----=---------------------------------======================++++++++++++++++++++*************888888888888888888#8*==-------------------==+-.                                                                                                 
                                                                                        .-------------------===++++++++================--=------------------------------------------------------------=========================+*++++++++++++++++++***********88888888888888888*8####8++=======--===--===+=:                                                                                                    
                                                                                        .----------------------============---------==--======------------=------=========-------------------------==========================+=+++++++++++++++++++***********88888888888888888888#######8*+++++++++++++-:.                                                                                                      
                                                                                         ---------------------------------------------=---------====---=====================-----------------================================++++++++++++++++++++***********88888888888888888888#######8#888888+----::                                                                                                          
                                                                                         :---==-----------------------------::--------------------===============+++++++++======-----=======-================================+++++++++++++++++++***********888888888888888888888######8888888=                                                                                                                  
                                                                                         :---===----------------:::--------:::::---------------===============++++++++*+++++====-======++===================================++++++++++++++++++++**********8888888888888888888888888888888888-                                                                                                                   
                                                                                         .-=========--------------::::--:::---------------------==========+=+++++++*********++========++======================+++==========+++++++++++++++**************888888888888888888888888888888888888-                                                                                                                   
                                                                                          -=====++==--------===-----:-------====++++++=+============++++++++++++*****88888888**+++==========================+++++++=====+==++++++++++++++***************88888888888888888888888888888888888*                                                                                                                    
                                                                                          :===+++***+-====++++=====+====++++++++*+**********88888888888*8*8*****88888888####%%#8*+========================+++++++++++==++++++++++++++++++***************8888888888888888888888888888888888*:                                                                                                                    
                                                                                           -==+++**88*+++++++++++++++*++*************8888888########################%%%%%%%####8*+=======================++++++++++++++++++++++++++++++++************8888888888888888888888888888888888888+                                                                                                                     
                                                                                           .===+++**888#####8****************88**8888#####8888888888888888888888888888**++===============================+++++++++++++++++++++++++++++**************88888888888888888888888888888888888**8=                                                                                                                     
                                                                                            -===+++++++++*****++*********88888888888**++++=========++======+=+++++======-------========================++++++++++++++++++++++++++++++****************8888888888888888888888888888888888***:                                                                                                                     
                                                                                            .================++++=++++++++*++========---::----======+++++++++++=======-------------==================++++++++++++++++++++++++++++++++**************88888888888888888888888888888888888****                                                                                                                      
                                                                                             :========--==-=========----:----:-:::::::::::--====++++++++++++=======-------------------===============++++++++++++++++++++++++++++++++***************8888888888888888888888888888888888***=                                                                                                                      
                                                                                              :====------=========------:--------::-::---======++++++++==========-----------------------==============++++++++++++++++++++++++++++++*************888888888888888888888888888888888888****:                                                                                                                      
                                                                                              .-==-------===========-=---==================+++++++===+++=======-------------------------=============++++++++++++++++++++++++++++****************888888888888888888888888888888888888***+                                                                                                                       
                                                                                               .----------======================+++==+++++======++++++=======---------------------------============++++++++++++++++++++++++++++***************8888888888888888888888888888888888888****-                                                                                                                       
                                                                                                :----------======++++++===++++++++++++++++++++++++++++========----====------------------=========+++++*+++++++++++++++++++++++++**************8888888888888888888888888888888888888*****.                                                                                                                       
                                                                                                 -----------==+++++++++++++++++++++++*********+++++++==========---======------------============+++++++++++++++++++++++++++++++++++***********888888888888888888888888888888888888*****+                                                                                                                        
                                                                                                 .:---------==++++*****************************++++=======---------===-----------=============++++++++++++++++++++++++++++++++++**************8888888*8888888888888888888888888888*****=                                                                                                                        
                                                                                                   :---------===+++****8888888888888888******+++++=======-------=------------================+++++++++++++++++++++++++++++++++++****************8******888888888888888888888888888*****.                                                                                                                        
                                                                                                    ----------=====+++***8**8888*8********+++============---======-----========================++++++++++++++++++++++++++++++************************88888888888888888888888888888*****.                                                                                                                        
                                                                                                     ----------=======++++++**++++++++++++===============----==--=--==========================+++++++++++++++++++++++++++++++***********************8888888888888888888888888888*******.                                                                                                                        
                                                                                                     .------------=========+++++++++++============--------------================================+++++++++++++++++++++++++++************88***8888888888888888888888888888888888888*****+                                                                                                                         
                                                                                                      -------------------=----=====--------------------------------============================++++++++++++++++++++++++++++*********8**88**88888888888888888888888888888888888888*****=                                                                                                                         
                                                                                                      .-------------------------------------------:---------------------=--=========================+++++++++++++++++++++***********8****888888888888888888888888888888888888888***888=                                                                                                                         
                                                                                                       :----------------------------::::::::::::::--:---------------------------=====--============+=++++++++++++++++++*************8888888888888888888888888888888888888888888888888*=                                                                                                                         
                                                                                                        --------------------:::----::::::::::::::::::---------------------------==----==============+++++++++++++++++******8********88888888888888888888888888888888888888888888******-                                                                                                                         
                                                                                                        :------::-------::::::--:::::::::::::::::::::::---------------------------==-=========++++++++++++++++++++************8****88888888888888888888888888888888888888888888888****:                                                                                                                         
                                                                                                        :-----------------::::----:::::::::::::::::::::-------------------------=-===========++++++++++++++++++*****************88888888888888888888888888888888888888888888888888****.                                                                                                                         
                                                                                                        .------------------::---::::::::::::::::::::-::----------------------------===========++++++++++++*********************888888888888888888888888888888888888888888888888888****                                                                                                                          
                                                                                                         -------------------------------:-::::-:::--:-----------------------==---==========++++++++++++++**********888888**8888888888888888888888888888888888888888888888888888888***+                                                                                                                          
                                                                                                         :-------------------------------------------------======---==-----===--====++++===++++++++++*********8888888***8888888888888888888888888888888888888888888888888888888888***+                                                                                                                          
                                                                                                         .-------------------------------------------=-=================-===========+++++++++++***********88*888888888888888888888888888888888888888888888888888888888888888888888***=                                                                                                                          
                                                                                                          ----------------------------------------====+==========--====+====+====++++++++++***********88888888888888888888****88888*888888888888888888888888888888888888888888888****-                                                                                                                          
                                                                                                          .-=============------------====-====--========+++======-====+++++++++++++++************88888888888888888888888888888888888888888888888888888888888888888888888*88**8888****:                                                                                                                          
                                                                                                           .===============-------===-===========+++=+++++==+++==+=++++++++++++************888888888888888888888888888888888888888888888888888888888888888888888888888***********8***:                                                                                                                          
                                                                                                            .=+==================================+++++++++++++++++++*+++++++*********888888888888888888888888888888888*****8888888888888888888888888888888888888888******************-                                                                                                                          
                                                                                                             :==========================++++++==+++++++*++***+++++***********88888888888888888888888888888888888888*****88888888888888888888888888888888888888888*888************8***.                                                                                                                          
                                                                                                              .:=+++++++++++===========+++++++++++++++****************8*888888888888888888888888888888888888888888*888888888888888888888888888888888888888888888*****************8***                                                                                                                           
                                                                                                                 :+*++++++++++++=====++++++++++***++********888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888**********************                                                                                                                           
                                                                                                                   :-+*********+++++++++++*++************88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888*8******************8****+                                                                                                                           
                                                                                                                      :-=**************+***********8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888**************************+                                                                                                                           
                                                                                                                          .:-=+******************88888888888888888888888888888888888888888888888888888888888***8888888888888888888888888888888888888888*****************************-                                                                                                                           
                                                                                                                            :-----======+********************8***8***********************8*8888888888**************88888888888888888888888888888888888******************************-                                                                                                                           
                                                                                                                            ------------==+**88888888************************************888********************8888888888888888888888888888888888888*******************************-                                                                                                                           
                                                                                                                           .------------==++**888888888*************************************************************88888888888888888888888888888888**********+*+*******************-                                                                                                                           
                                                                                                                           :-------------==++**888888888*******+*********************************88888*****8*****8888888888888888888888888888888888******+++**+++*******************-                                                                                                                           
                                                                                                                           ---------------==++***8888888********++*********************************888*88*8888888888888888888888888888888888888*********++++++++++******************-                                                                                                                           
                                                                                                                           ---------------===++*888888888*******************************8********888888888888888888888888888888888888888888888********++++++++++++******************-                                                                                                                           
                                                                                                                          .----------------===++**888888888****************************88888888888888888888888888888888888888888888888888888*******+++++++++++++++******************-                                                                                                                           
                                                                                                                          :------------------==+**888888888****************************888888888888888888888888888888888888888888**888************+++++++++++++++++*****************+                                                                                                                           
                                                                                                                       ..:-------------------===+***88888******************************888888888888888888888888888888888888888****************++++++++++++++++++++*******************:                                                                                                                          
                                                                                                                  ..::-===--------------------==+++**888888***************************888888888888888888888888888888888*********************+++++++++===++++++++++*******************-                                                                                                                          
                                                                                         .::-----+*****+: .... .:--==+==-----------------------===++**888888**************************88888888888888888888888888888************************++++++==========++++++**************88*****.                                                                                                                         
                                                                                      .:-===--++*+##8*=:.....:-=+++=-----------------------------==+++**888*8*************************88888888888888888888888*****************************+++++++=========++++++++*******888**88888888*+==--:                                                                                                                   
                                                                                  ...:--==-:-==+=::.........-8*+=---------------------------------==+++***8****************************88888888888888888******+++************************++++++++=========++++++++**********88888888888#%%@@#**+=-.                                                                                                             
                                                                               .:=+*#%%%%%88%%*--:.........-*+-------------------------------------==+++*******************************888888888888888****++++++++++++******************+++++============++++++++************88888888888******8####8+=:                                                                                                         
                                                                            .-+8#%%%%%%%%88%%*=--:.:....:.-+=---------------------------------------===++++*******************************888*********+++++++++++++++******************+++++============+++++++*************88888888888888***8**8888##888*=.                                                                                                    
                                                                          :*#%%%%%%%%%%%#8%%#=-::.::.....:=+------------------------------------------===+++**************************************++++=====+++++++++++++*************++++++==============++++++*************88888888888888#*+**88888#%@%%@@@%*=.                                                                                                
                                                                        =8##%%%%%%%%%%%%##%%*--::........:+=--------------------------------------------====+++******************************+++++==========++++++++++***************+++++==============+++++************88888888888888888##8***888888%%#%@%%%%%8=.                                                                                             
                                                                     .=8###%%%%%%%%%%%%%##%#=:-::........:+-----------------------------------------------====++++*******++++++++++++++++++=================++++++++++**************++++===============++++++***********8*88888888888888888#%#****888*8%%#%%%%%%%%#:                                                                                            
                                                               ..:::+####%%%%%##88*8***8**8*::-:....:....:+-------------------------------------------------=====++++++++++++++++++++==============-========++++++++****************++++===============+++++***************88888888888888888#%8*++***++8%%#%%%%%%%%%8:                                                                                          
                                                ....::::::-----::=*#####%%#*=-:.....:::::..-:::::........:+----------------------------------------------------=========+++++==+==========-=--------=====+++++++++*****************++++===============++++++*****************8888888888888888##*+=++++==8#8#%#####%%%%8-.                                                                                       
                                     ....:::-----=---=---:::-=+8######%#+-...:::::::....:..:::::.........:+=---------------------------------------------------=---======================--------=======+++++++++++**************+++++===============++++++**********************8888888888888#*======-------::::::+#%%%#8+=:.                                                                                  
                    .....::::-----====------:::::----==+*8#%%%%######8=:.:::::::.::..:..:..::::..........:+=---------------------------------------------------------===--===========================+++++++++++++*******+******++++++=============+++++++************************888888888888#8=--==----:::::...:::--+#%8**88#8*+=-:                                                                           
         ...::----========----::::---==+++*88###%%%%%%%%%%%#%####%#+:....:::::::.:::::.....-:.............=+-----------------------------------------------------------=------=====================+++++++++++++++++**********++++++===============++++++****************************8*888*88888=--==--::::......::.:-:-#%%8+==++++******++=--::.                                                               
.::----=====------::::---=++*88##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#8+:....:::::.......::::::..-:....:........-+------------------------------------------------------------------==-===========+++++++++++++++++++++++*********+++++++================+++++++************************************88=::-=--::::......:..::---8%@%%#*==--===++++++******88888####8*+==-:..                                           
-------====++++**88##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*-......:::::::....:::::::..:-:...:.........:+=------------------------------------------------------------------=--===========+++++++++++++++++++++++++++++++++++==================+++++++++***********************************88=::-==-::::::......::::-:-*%%%%%%%%#8**+======-------======+++**8##%%8+-:                                       
%##%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##8*=:........::::::::...::::::::..:-:....... .:...:-+-------------------------------------------------------------------===============+++++++++++++++++++++++++++++++=====================++++++*************************************88=::----::::......::::::----8@%%%%%%%%%%%%%%%%%%#####888**++========++*#%%%8+:                                   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###8***+===-:.............:::::::::........::...-::........::...:==-----------------------------------------------------------------------==============+++++++++++++++++++++++++++====================+++++++*************************************88=::----::::......:::::::---+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#8*+===+++*8%%%#*-.                               
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%###88**++==--::::::::::..............:::::::::::::............-::::............:=----------------------------------------------------------------------------===========++++++++++++++++++++++++====================+++++++*******************+++****************88=::--=-::::......:::::::----+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*+=++++*#%%%#*:                             
##############888888**++==--::::::..............................::::::::::::::::......... .::.:............ .==------------------------------------------------------------------------------================+++++========+++===================++++++++****************+++++++++*************8*-:-----:::::.....::::::::---====+*8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#*==**+*#%%%%#*-.                         
::::::::::::::::::::::::.::::::::::.............................:::::::::::............... .:.:..............:+----------------------------====---------------------------------------------------======================++++====================+++++++**************+++++++++++++************8+::-----:::::.....::...::::---==-::::---===+++==========++**8#%%%%%%%%%%%%#++**+8%%%%%%#8=:                      
......:......::............::::::..:..........    ..............::::::::::::.......:::....  :................:==---------------------------+*++=-----------------------------------------------======================+++++++=====================++++++**************+++++++++++++************8=::-----:::::.....::::::::::--===::::::::::::::::::::::::::::--=+*#%%%%%%%%%8++*++*#%%%%%%%#*+-:                 
..................:..:::........:::::..........................::::::::........:::::::......:.................-+=---------------------------+***=--------------------------------------------=============================+======================+++++**************+++++++++++++++************-::-----:::::.....::..::::::---==-:::.::::::::::::::::::::::---::::=*#%%%%%%%%*+**+=+*#%%%%%%%%%#8+-:..          
....::................:.....................................:::::::::::.......:::-::....... .:...... ..........:==----------------------------==-----------------------------------------===============================+=============-=========++++++************++++++++++++++++************+:::----:::::......:...::::::---==-:::::::::::::::::::::::::-:--:::...:+#%%%%%%%8=+++++==++*##%%%%%%%%%%##**+++++*
............................::.............................:::.:::::::::::::::::-:::. ..... .:..................:==--------------------------------------------------------------------===============================+++=====================+++++++************+++++++++++++++++************-:::----:::::.......::::::::::--===-::::::::::::::::::::::::----:::....::+#%%@%%%%8+-==+++++===+*88#%%%%%%%%%%%%%%
....................:..............::.......................::::::::::::::::---::::..........::...... ..........:-+=------------------------------------------------------------------=========================================================+++++*************++++++++++++++++++**********+:::----::::::......::..:::::::---==-:::::::::::::::::::::::----::::.::::::-+#%@%%%%%#*+---==+++++=====+++*******++
.:......................................................:::::::::::::::::::----::.............::..... ...........:-+=-----------------------------------------------------------------=========================================================++++**************+++++++++++++++++++********+-:::----:::::........::::...::::--==--::::::::::::::::::::::-----:::.......::=#%%%%%%%%%%%8*+=-----===++++++++++++=
::::.....................................................:::::::::::::::------::...............:...................:==-----------------------------------------------------------------=======================================================+++++************++++++++++++++++++++++*******-:::-----:::::.........::::::::::--===-::::::::::::::::::::::-----:::::..::::::-8%%%%%%%%%%%%%%%%##8**++===--====++*
..................................................:::::::.:.:::---:::::-----::..... ......... ..:....................=+------------------------------------------------------------------======================================================+++*************+++=======+++++++++++*******=:::-----:::.:..........:::..:::::--===-:::::::::::::::::::::------::::...:.:::::=#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
.................................................:.::::::::-:::--------:::::....................:. ...................-+=----------------------------------------------------------------=====================================================++++******8*****+++========+==+++++++*******=::------:::..:..........::..::::::--===--::...:::::::::::::::------:::........:::-==+*8#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:.....:...........................................:::::::::::::----------::.....  ...............::. ..............::..:=+--------------------------------------------------------====----====================================================++++*****8*****+++============+++++++******=:::-----:....................::::::--===--::::::::...:::::::::------:::.......:::-==-::::-==+*88##%%%%%%%%%%%%%%%%%%##
:::::.:............................................::::::::-:--------::::::............ ..........::.....................-+---------------------------------------------------===-========----===============================================++++****88888**++++============+++++++*****=:.:-----::................::..:::::::--==---::::::::::::::::::-------:::.....:..::---:::::::::::::---===+++*****++==---
:::::..............................................::::::::--------::::.................. ..........:.........  ..........-++---------------------------------------------------=============--==============================================++++****8888***++++==============++++*****=:::-----:::................:::..:::::::-==-:::::::::::::::::::--------:::....:::::::-:::::::::::::::::::::::::::::::::::
::::..::..........................................::::::::--------:::::........................... ..:...............:......-==------------------------------------------------==========-====================================---------=======+++***88888**++++===============++++****-::::----::::...............::...:.::::::--==-::::::::::::::::::--------::::.:......::::::::::::::::::::::::::::::::::::::
::::..........................................::::::::::::---------::................... .............:......................:-=-----------------------------------------------===============================================---------=======++***88888***+++===============+++++***-..::----::::::...:.........:::...:::::::::--=-:::::::::::::::::-:-----::::............::::::::::::::::::::::::::::::::::::
....:::........................................::::::-:::::-:::::::::.....................    .........::..::...:.........::::.:-=-------::-----------------------------------===============================================-----------======++***88888**++++===============+++++*+-::-------:::::.................::::::::::::--==-:::::::::::::::::-------::................:::::::::::::::::::::::::::::::::
:::......::.....................................:::::::-------::::......................................::..................::::::==-----------------------------------------==============================================--------------=====++**888888**+++===============++++++=:::-------::::::...............:::..:::::::::---==-:::::::::::::-:--------:::..................::::::::::::::::::::::::::::::
:::..::...................................::::::::::--------:::::......................... ............. .::................:::....-==---------------------------------------=============================================--------------=====+++**888888*+++=================++++-:::-------::::::..:............:::.....::::::::::-=-:::::::::::::----------::::::::.........::::::::::::::::::::::::::::::::::
::::............    .......................:::::::----------:::::..........................................:::..:.::...........:::...:-=---------------------------------------=========================================-----------------====+++**88888**+===================++=:::::------::::::.........::.....:........::::::::::-=-::::::::::::-------::::::::::::............::::::::::::::::::::::::::::::
..........................................:::::::::::-----::::::...   .......................................:::.....::........:::......:-=-----------------------------------========================================--------------------===++**88888**++====================::::-------::::::...........................::::::::::--==-::::::::::-------:::::..................:::::::::::::::..::::::::::::::
:::......................................:::::::::----------::::...............................................::.....:::.................:-----------------------------------======================================----------------------===++**88888**++==================-::::-------::::::...:......................:::::::::::::----::::::-:::------::::::::...................:::::::::::::::::::::::::::-
...:::...........     .................:::::::::::----::-::::::..........::::::........ ........................:::............:..::.........:-----------------------------------===================================----------------------==+++**88888*++================-::::::-------:::::::.::......................:::::::::::::::--==-:::::::::-----::::::::::..............::....:::::::::::::::::::::-:::
::..:.::............... ...........::::..:::::::::-------:::.................................................:.....::.........:...............:.::-----------------------------=-=============================---------------------------===++**888888*++==============-:...::-------:::::::..:.................:......:..:::::::::::::--=--::--:::::----::::::::::::................:::::::::::::::::::::::::::
::::.............................::.:::::::::::::::-::::--:::..:..........................  .....::..................:............:................::--------------------------=--==============-----------------------------------------==+++**88888**+=============-::.:::---===--::::::...::...........................::::::::::::::---=---::::-------:::::::.:........::..:::::::::..::::::::::::::::::::::
:.:::................................:::::::::::::::::::::::............................. .....::::::...................:..............................::----------------------=================-----------------------------------------===++**88888*++===---===--::::::----=-==-:::::::..:::.................:::...::.....::::::::::::-------::::::----:::::::::::::.::::::::::::....:::::::::::::::::::::::::
................................::::::::::::::::::::::::::::....................................::::::....................................................::--------------------===================--------------------------------------===++*888888*+===--==--:::::::--=----=--:::::::..:...................::........::::::::::::::::--------::::::--:::::::....:.:......:::::....::::::::::::::::::----::::.
...................................:::::::::::::::::::::::::.....................................::::.................................:........................:::---------------================---------------------------------------===+++*888888*+===--:::::::::-----------::::::..:::..................::......:::::::::::::::::::---------:::::::::::::........:::........:::::::::::::::::::----:::..:::
...........................::::::::::::::::::::::::::::::::......................................::::..................................::::.......................:::::----------==============-----------------------------------------===++**88888*+=--:.::----------====---::::::...:........................:...:::::::::::::::::::::-----------::::::::::.::.............::::.:.....::::::::::---::::...:::
.....::.................:::::::::::-----::--:::::::::::::::.....................................::................................:.....:::::..............::...:::.....::::----================----------------------------------------===+**888**+-:::::::-----------------::::::..::............::.................::::::::::::::::::::::--------::::::::::................................:::::-::::.....:::
............................::::::::::::::::-::::::::::::::.................. .  ...   ........:::::::::.................................::::..::::............................:::---============--------------------------------------=======-:::--:-:------=----------:--::::::..::......................:::.......::::::::::::::::::::::::--------::::::::::..........................:::::::::::::.......:::
............................:.::::::::::::::::::::::::::::......................   .   ...........::::..................................:.:::::....::.....:........................::::::------====---------------------------------:-::::::::::----------------------:::::::::..::....:::................:...::..:.::::::-::::::::...:::::::---------::::::.......:.:::::::::........::::::::::::::....::::::::
................:::..:::::::::::::::::::::-::::::::::::.::............................ .....................................................:::::...:.............:::...:.:......:::::::::::::::::::::::--:::::::--------:::::::::::::::::-------------------:------:::::::::::::.....................................::::::::::::::::::::::::---------::::::...........::::......::::::::::::::::::....::::::::
......................:.:::::::--::::::::::::::::::::::::..................          ............:::::.......................................:::::::::...............::.::::........:.:::::::::::::::::::::::::::.::::::::::::::::--:-----------------------------::::::::::::::..::::::::::....................::::::::::::::::::::::::::::::-----------:::::......................::::::::::::::::::::::::::::
........................:::::--------::::::::::::::.............................. ......... ......:::::...............................:::::::.:....:::::::::::::::::...:.::::.:::........:::::::::::::::::--::::::::::::-:::::---------:--:---------:-:---------::::::::::::..............................:..:..::::::::::::::::::::.....:::::::---==---::::::...........::::.....:::::::::::-:::::.......::::::
....................:::::::---------:::-----::::::::.........................................:::::.:::::........................:.....::::::::...:.....::::::::::::::......::::.:.::......:::::::::::::-----:--------------:----------::-:-:::::-::::::::---::::::::::::::::.:::.........................:...::::::::----::::::::.:...:..::::::::--==----:::::::...........:......::::::::::::::::......::::::::
......    . .........:::::---------:::::::::::::::::...........   ..............  ...........:::::::::::..........................::::::::::.....:........:::::::.::.........:.....::::::::::::::::::::::--::::-::-:::::::----::::::--:-::::::::::::::::--:::::..:::::....::::::::..........:.:.........:.:::::::::::-----:::::::..............::--==-----::::::..................:::::::::::::.........::..:..:
....................:::::::----------::::::.........................................................::........................:::::::::::::::...............:::::::.::::.:.::::::::::...::.:::::::::::::::::::::::--:::::::::::::::::--:::::-::::-----:::::..:::::...::::::::..:..............................::::::------::::::...............:::-=-------:::::...................:::::::::::..........::::.:::
...............::::::--------:::::::::::::::...................................................::::::........................::::::::::::::::::::::................:::::::::::::::::::::::::...::::::::::::::::::::::::::::::::::::::::::::::::---:::::..:::::.....:::::::::::::..........................::::::::---------::::................:::--------::::::.:...............::::::::::::.....::::::..::::::
............:::::::::------::--:-:::::::::::.:::::............................................::::::::...........................:::::....::::::::::::...........::::::::::::::::..::::::::::::::::::::::::::::::::::::::::::::::-:--:--:--:-::::::::::::::::::::...:::::::::..::..........................:::::::::-------:::::::..............:::--=----:::::::..............:::::::::::......::::::::::::::::
...::::::..:.:::::-----::---::::::::::::::..................................... ..............::::::::::...............................:::....:::::::....:.............:::::.:::.:::..::.:::::::::::::::::::::::::::::::::::::::::::-:::-::::::::::::::::::::::....::::::::................................:.:::----------::::..............::::::--------:::::::...................::::..::::::::::...:::::::::
.......:..::::::::--:--::::::--::::::::::::..................................................::::::::::.........::................:::.....................::::::::::.......:::::::::::.::::::::::::::::::::::::::::::::::::::::::::::::::::.::::::::::::-::::::::::::::::::.............................:..:::::::------:::....................:::---------::::::.................::::::::::::........::::::::::
..:::::::::.::::::::-----:::::::::::::::.....................................................::::::::::::.........................:::::::::::.............:::::::::::::::......:..:::.::::::::::::::::::::.::::::::::::::::::::::::::::......:::::::----::::::......:::::::................................:::::-------:::::.....  .............:::----=---:::::::::::::::::::::::::::::::::::::.:::::::::..::::
:.::::::::::::::::::::::::-::::::....::::........................ ..........   ...........:::::::::::::::.......................:::::::::::::............::::::::::::..:......::............::.:::::::::::::::::::::::::::.:::......:::::::::::------::::::::......::::::::::..........................:::::::--------::::::...................::::-------::::::::::::::::.:::::::::.........:::...:.......::::.
..:::::::::::::::::-:---::::::::::::.:..:::::::..............................................:::::::::::::..:::.:...................::::::::::::::..........::::::::::::::::::::::::....:::::::::::::..:::...:......:::::::::::::::::::::::-:::::::::::......::.:::::::::::............................:::::::--------::::::................:::::::---==--::::::::::::::....:::::::::::::::::::..:..::....::::::

200 columns

                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                     ......:::  ...:..                                                                                                  
                                                                        ..::==++++**+**88888888888###88*+=:::.                                                                                          
                                                            .  .::-==++**8888#8888888888###8######%%%%#######8888**=-:.                                                                                 
                                                       ..-=++*888*8888##88###8888888#%%%%%%%#####%%%%%%%%%%%%%%%%%%%%#88+=-:.                                                                           
                                                     ::=8#%%%%####8888###############%####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####8+:                                                                         
                                               . .:-=*##%%%%%%%%%%%%%%%%%%#####888888##%%%%%%%%%######%%#####%%%###############*+-:.                                                                    
                                             .:-=+88##%%%%%%%%%%%%%%%%%%########%%%%%%%%%%%%%%%%%%#####%%%%%%%%%%%%%%%%%%%########8+-.                                                                  
                                        ...-+*88####%%%%%%%#%%%%%%%%%%%%#####%%%%%#%#%##%%%%%%%%%%%%%%%%%%%%%%%%%@%%@@%%%%%%%%%%%%%###*=:                                                               
                                    ..:==*88#######%%%%%%%%%%%%%%##########888*88##%%%%%%%%%%%%%%#####%%%%#%%%%%%%%%%%%%%%%%%%%%%%%%%%###*-..                                                           
                                    -=++8########%%%%%%%%%%%%%%%%##888888888888#################%%%%############%%%##%%%%%%%%%%%%%%%%%%####8+:.                                                         
                                    .=*8#######%%#%%%##%%%%%%%%%%%%%%####%%#%%%%%%%%%%######%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%########8+-                                                        
                                     :=+*88####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%###%%%##%%%#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####8+:.                                                     
                                     ..:=**8#88########%%%%%%%%%%%######888###88888###################%%%%%%%%%%%%%%%@@@@@@@@@@%%%%%%%%%%%%%%%%###8+:                                                   
                                        :-+***88888#####%%%%%%#8888888**********888888888888888888#############%%%%%%%@@@@@@@@@@@@@@@@@%%@@%%%%%%%##*=:                                                 
                                         .:=**8888888####%%%#8****+********++++++++++++==++++++*******88#8888###8##%%%@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%#8=:                                                
                                      .   .:=+=+*88888###88+++====--------====----------------====++++++***********88##%%%@@@@@@@@@@@@@@@@@@@@@@@%%%###+.                                               
                                      .    ::-+*8#####88*+++=----::::::::::::::::::::::::::---------====+++++++********88##%%@@@@@@@@@@@@@@@@@@@@@%%%%##*-.                                             
                                          ..-*8######8*++=---:::::::::::::::::::::::::::::::----------=====---=-=====+++++**8#%%%%%%%%%%%%%%@%@@@%%%%%%%##=                                             
                                           .=######*==----:::::::::::::::::::::.::::::::::::::---------------------=======+++*888#%%%%%%%%%%@@@@%@@%%%%%%#8+.                                           
                                           :*####8=---:::::::::::::::::::::::::...:::::::::::---------------------========++***888###%%%%%%%%%%%%%%%%%%%%%%8=.                                          
                                           -8##8*---::::::::::::::::::::::::::::::::::::::::---------------=============+++*****888###%%%%%%###%%%%%%%%%%%%%#+.                                         
                                           :8*8+---::::::::::::::::::::::::::::::::::::::::---------------============++++++***8888##%%%%%%%%%%%%%%%%%%%%%%%%%8=                                        
                                           .===-:::::::::::::::::::::::::::::::::::::::::::--------------==============+++******888###%%%%%%%%%%%%%%%%%@@%%%%%%8-                                       
                                            :--:::::::::::::::::::::::::::::::::::::::::::--------------==============++++*****88888###%%%%%%%%%%%%%%%%%%%%%%%%#=.                                      
                                            .:--::::::::::::::::::::::::::::::::::::::::----------------===============+++***8888####8#%%%%%%%%%%%%@%%%@%%%%%%%%*:                                      
                                            .:--::::::::::::::::::::::::::::::::::::----------====-----===============+++++**88########%%%%%%%%%%@%%%%%@%@%%%%%%#=                                      
                                           .:------:::::::::::::::-:-----========+++++********+*++++++================+++++**888#####%%%%%@%%%%%%%%%%%@@%%@%%%%%#+                                      
                                          .---------::::::::::::::--===+***8888888######8#88888888888888**++========++++++++**888##%%%%%%%@@%%%%%%@%%%@@%@@%%%%%#*.                                     
                                         :-========--::::--:---:::-++**8#8##########%#####888888**888######88*+++++++++++++++**88##%%%%%%%@@@@%@%%%%@%@@%@%%%%%%%8:                                     
                                        =++********+=-::----------=+*888#####%%%%%%%###8**+++++++++++++*8888888**+++++++++++++*88###%%%%%%@@@@@@%%%@@%@@@@%%%%%%%%+:                                    
                                      :*88####8##88*=-----------===**8#####%%%%%####88888******+++++++++++**888888**+++++++++**88##%%%%%%%@@@%@@@@%%%%@@%@@%%%%%%%+:                                    
                                     :88#########88*+=----::::---=+*88######################888888***********8888888**+++++++***###%%%%%%%@@%%%%@@%%%@@%%%@@@%%%%%*-                                    
                                     ***++*8######88*+--:::::::--==+*88888888########%%%##888######88********888888888*++++++++*8###%%%%%%%%%#%%@%%@%%%%%%%@@%%%%#=.                                    
                                     -===+++**8888888*=-::::::---=++*8888888######%%##8*++=======++*8#88******8888888***++++++***8#%%%%%%%%%%%%%%%@%%%%%%@@@%%%%%8-                                     
                                     .==++***888####88+-:::::::--=+**8888888############%%#88*++===+++******************+++++*****##%%%%##%%%%%%@@@%%%@%%@@@@%%%%8                                      
                                       =++*88888*88###8:::::::--==+*8888888888888*88#%%%%#%#**88##8*****+*+**++++++++*++++++++++++*###%##%#%%%%%@%@@%%@@@@@@@%%%%+                                      
                                       :=*88##888**+++=::::::--==+**8*******++=+*88*#%%%%888+-=+**8####8**++++++++++++++++++++++++**888##%%%%%%%%@@@%@@@@@@@@@%#%8                                      
                                       .-+8###%%%%8++:::::::---==+***+++====-=+888*-*##%%#8+----===+***8****++++========++++++++++++**8#%%%%%%%@%@%%@@@@@@@@@@%#%+                                      
                                      .:--*###%@%%*:::::::::--==+++++++=----=+*==+===*888*+-----==+++**8**++++===============++++++++*8##%%%%%@@@@@%%%@@@@@%@%%%%=                                      
                                       .::-+8*#%%8-::::::::----=+++++++====----===+++++++++++=+++++*****++++===-------========+++++++**##%%%%%@@%%@@%%@@@%%#8***8=                                      
                                          .-++***-::::::::::--==+++++++=====---===++++++=======+++++++++=====---------=========++++++**8#%%%%@%%%@@@%%%#*+====+**+=:                                    
                                         .::=+++=::::::::::---=+++++++++====--------======================-------------======++++++++**8#%%%%%%%%@@@@%8+==+*8888888*=                                   
                                            :=++-:::::::::---==++++++++++===---::::-:-::::----------------------------======++++++++**8#%%%%%%%%%@%%#*++*88888888888+=                                  
                                            .===::::::::----==+++++++++++===---:::::::::::::::::------:::::::::-------====+++++++****8#%%%%%%%%%%#888**8888****8888*=+                                  
                                            :---:::::::---===+++++++++++====--:::::::::::::-::::::::::-:::::::------=====++++******88##%%%%%%##88888888888**+=++**+===.                                 
                                           .:--:::::::----===++*****+++====---:::::::::::::::::::::::::-------=----====++++*****88888########88888888##8*+=---=+*++=-+.                                 
                                           :-:::::::::----==++*****++++====---::::::::::::::::::::--------------======+++***888888888888888888888888####8+----=**+=--+                                  
                                          .-:-:::..:::----==++++++++++++==----::::::::::::::::----------------======++++**8888888888888888888888**88###88+=----+*+--=.                                  
                                          .:-::::..::----===++++++++++**+==--::::::::::::::::::------------=======++++**8888888888888888888888**++*8888**+=--:-+*=--.                                   
                                          .---------====+++++++++++++++**+=--:::::::::::::::::::-----------======++++**8888888888888888*8888**++=+88***+=---::=**-:                                     
                                          .---======+++**********+++++****+=-:::::::::::::::::::::---------=====++++**88888888888***********+++**888*+==-::::-+8=:                                      
                                           :-==+++++++**8####%%%%#88**8*88*-:::::::::::::::::::::---------======+++***88888888*************+=+888888*+----::-+8=                                        
                                           .::-=+*****8############88888#8+-:::::::::::::::::::----------======++++****888****************++****++======--=+*+:                                         
                                            :::----++**8888888888#####888*=::::::::::::::::::------------======+++++************************+=----=++*****++-                                           
                                            :::----=+**888888888#88888*+=-::::::::::::::::-:------------========++++**************88***8***=----=++****+=--.                                            
                                            ::------+**888888888**++==--::::::::::::::::---------------=========+++++************888888*88+-:----===---=-.                                              
                                            :-------=+**8888**++===------:------::-------------------===========+++++++++*******8888888888=----------==.                                                
                                            :---------=========---=-==-----------=-==-------------=============++++++++++******888888888###*+=======-:                                                  
                                            .----------------------------==============----=---================+++++++++******8888888888###888*-...                                                     
                                             -===-------:::--:::--------=======+++***++====+==================++++++++++*****88888888888888888.                                                         
                                             -==++=-======--==++++++++++++********88###8+============+++++==++++++++********88888888888888888+                                                          
                                             .=++*8*88***********888888888#########88***+============++++++++++++++********88888888888888888*-                                                          
                                              -==++++++++++******++=======++++++====-----==========+++++++++++++++********88888888888888888**                                                           
                                               -==--=====-------:::--===++++=====-----------=======+++++++++++++++*******888888888888888888*+                                                           
                                               .-----=================+=+++====-------------======++++++++++++++********888888888888888888**:                                                           
                                                :-----=++++++++++++++++++++====--==--------=====+++++++++++++++++******888888888888888888***                                                            
                                                 :----==+******8*******++====-----=-----=======+++++++++++++++++********8***8888888888888**=                                                            
                                                  :----===++*******+++======--===-=============+++++++++++++++************888888888888888**=                                                            
                                                   ------=============-----------==============++++++++++++++*********888888888888888888***:                                                            
                                                   .--------------:-::-::--------------===========++++++++++******8888888888888888888888*88:                                                            
                                                    ----------:::::::::::::--------------========+++++++++********88888888888888888888888**.                                                            
                                                    :--------:--:::::::::::--------------======+++++++**********8888888888888888888888888**                                                             
                                                    .----------------:----------------=-======++++++*****88888888888888888888888888888888**                                                             
                                                     ---------------------===============++++++*****8888888888888888888888888888888888888*+                                                             
                                                     .=======-----=========++======++++++*****888888888888888888888888888888888888888**88*=                                                             
                                                      :==============+==+++++++++******8888888888888888888***88888888888888888888*********=                                                             
                                                       .-+++++++===+++++*+*******88888888888888888888888888888888888888888888888**********:                                                             
                                                          :=+****++++*******8888888888888888888888888888888888888888888888888*************:                                                             
                                                             .-=++++****88***888888888*****8888888*8*8**8888888888888888888***************.                                                             
                                                              ------=+*8888******************8************8888888888888888****************.                                                             
                                                             .-------=+*8888****+****************88**8**8888888888888888****+++++*********.                                                             
                                                             :-------==+*8888******************88888888888888888888888****+++++++*********.                                                             
                                                            .----------=**888**************888888888888888888888*******++++++++++*********-                                                             
                                             ...:---    .:===----------==+*888*************888888888888888************++++==+++++*********+                                                             
                                          .:=--+=+=:..-+==---------------=+****************8888888888****************+++=====++++*****8888888*=-.                                                       
                                      .-*8#%%8#=:....-+-------------------=++***************88888***+++++++********+++======++++******888888***888*=-.                                                  
                                    :*%%%%%%#%*-::..:=---------------------==++*****************+++===++++++******+++=======+++******88888888#**88#%%@%*-                                               
                                ..-8#%%#####8#-:....:=-----------------------===++++++++++++==========+++++*******++=======+++*******888888888#****8%%%%%8:                                             
                    ...:::--::-=*###*=::::::.:::....:=-------------------------==============----===+++++********++========+++*********888888888=+==++*++*%8=:.                                         
      ..::::------====++***8##%##8+:.::::::..::......+-----------------------------=--============++++++++*****+++========+++************8888888--=-::...:-+#8**+==-::..                                
:---====+++**8##%%%%%%%%%%%%%%#*=..:::..::::.:.......=---------------------------------=-=====++++++++++++*+*++++========++++******************8----::...::-=%%#8*++==++++++***+++=:                    
%%%%%%%%%%%%%%%%%%%%%%##88*+=-.....::::...::.::....:.:=-----------------------------------======+++++++++++++++==========++++******************8-:--::...:::-+%%%%%%%%%%%###88**+=+8#8+:                
##########88**++==-:::...:......:::::::......:::......---------------------------------------========++++++++++=========++++********++++*******8----::...::::-+88%%%%%%%%%%%%%%%%%8*+*8%#+:             
:::::::::::..::::...............::::::....:.. ........:=-------------=+=------------------------===========+++==========++++******+++++++*******:--:::.....::-==:::---------=+*8#%%%%8**8%%#*=:         
...........:...................::::....::::...:........-=-------------=+---------------------===========================+++******++++++++******=:--:::....::::-=-:::::::::::::-::-*%%%#*++**8#%%#*+=-::-
..............................::::::::::::..............-=---------------------------------============================+++******+++++++++******::--:::...:::::-=-::::::::::::--:..:-*%%%#*====++**888888
::..........................::::::::---:.......:.........-=--------------------------------============================+++******++++++++++****-:---::....:::::-==:::::::::::---::..::=%%%%%%8**+++=====+
.........................:::::::--:::::...................:=---------------------------------==========================++******++====+++++***=:---:.......:.::-==-::::::::::---::...::+8#%%%%%%%%%%%%%%%
::.......................::::::----::.....................::-=-------------------------=-==--==========================++**88*++======++++**=:---:.........::::-=-::::::::::---:....::-::--=++**888#88*+
:::......................::::----::...............:..........:=-------------------------========================---====++*88**++=======++**=::--::.......::.:::-=-:::::::::----::..:::::::::::::::::::::
:.:....................::::::---::.................:.........:::-----------------------========================-----===+**88*++=======++++-:---:::.......:.:::::-=:::::::::---::......::::::::::::::::::
::.....................::::----::....................:........:::-=--------------------======================-------===+*888*+========+++-:---:::........:..:::::--:::::::----::.:......::::::::::::::::
.:...................::::-----::......................::........:..:-------------------====================----------==+*88*+==========-::---:::.............:::::--:::::----:::::.......:::::::::::::::
:...................:::::----:::........................:........:....:-----------------==================-----------=+*888*+========-::----:::.............:::::::--:::::---::::..........:::::::::::::
::................:::::::----:..........................................::---------------========-------------------==+*888+=======-::--=-:::................:::::::----::---:::::........::::::::::::::
.:...............:::::::::::::..................::..........................::----------=========-------------------==+*888+=-=--:::---=-:::.:.........:......::::::----:::-:::::::::::::..:::::::::::::
...............:::::::::::::::..................::.................::...........::------========--------------------=++888*=-::::-------::..:.............::::::::::-----::::::.........::..::::::-::.::
.............:::::::::::::::::..................::..................:::..............:::--======--------------------=+++==-::---------:::.............:....:::::::::::----:::::...............::::::...:
............:::::::::::::::::............. ......:...................:::.................:::::-------::---------:::::::-----------::::::::................:::::::::::::----:::.....::::..:::::::::..::::
............:::---:::::::::...........    .......::.................:.:::::.:::::...::.:...:::::::::::::::::::::-----------------:::::::..:.:...........::::::::::::::::----:::..........::::::::::..:::
..........:::-----::::::::....................::::::...............:::......::::::........::.:::::::--:---::-------:::::::::-:::::::.::::.............:::::--:::.....:::-----:::.........::::::::...::::
........:::::---::::::...........................::............:::::::::........::::::::::::::.:::::::::::::::::::::::::-::::::::.:::::...............:::----:::........:----:::.........::::::....:::::
......:::-----:::::::..::......................::::..............::..::::::........:::::::::::::::::::::::::::::::::::::::::::::..::::................:::----:::.......::----::::.......:::::.::::::::::
..::::::::---:::::::...........................:::::.............:::.........:::::.:...::::::::::::::::::::::::::::::.::::::::::::::::...............:::----::..........:----:::::....::::::::::..::::::
:::::::::::-:::::.::..........................::::::.............:::::::......::::::::.:....:::::::::::::::::::..::::::::::::...::::::..............:::----:::.........::----::::::::.::::::::::.....:::

100 columns

                                                                                                    
                                                                                                    
                                                                                                    
                                              .  .                                                  
                                ..:-==*****8888####8*+=--:.                                         
                          .:+*8#888#####88###%%%%%%%%%%%%%##8+-.                                    
                       .-+*#%%%%%%%%#######%%%%%###%%%%%%%%#####*=.                                 
                   .-=*8##%%%%%%%%%%######%%%%%%%#%%%%%%%%%%%%%%%%#8=.                              
                  -*####%%%%%%%%%#######%%%#####%%%%%%#%%%%%%%%%%%%###+:                            
                  .-*8##%##%%%%%%%%%##############%%%%%%%%%%%%%%%%%%%%##*-                          
                    :=*888##%%#8****************8888#####%%@@@@@@@@@@@%%%#*:                        
                     .=+8###8+=---------:::-----==+++*****8##%@@@@@@@@@@@%#8:                       
                     .+##8*==-::::::::::::::::----------===+++8##%%%%%@@%%%%#=                      
                     .8#*-::::::::::::::::::::----------====++**8##%%%%%%%%%%#+                     
                      ++-:::::::::::::::::::::-------======+++**88#%%%%%%%%%%%%8.                   
                      :-:::::::::::::::::::::-------=======++**888##%%%%%%%%%%%%-                   
                      :-::::::::::::-----======+===========+++*8###%%%%%%%%@%%%%*                   
                     ------::::::=+*888######88888888*++++++++*8#%%%%@@%%%%@%%%%8.                  
                   :*8888*=------+8###%%%##8***+++++*888*++++++*##%%%@@@@%%@@%%%%-                  
                  :888###8+-:::-=+88##########8#88*****888*++++*##%%%%%%@%%%%@%%%=                  
                  .=++*8888=:::-=+8888#####88*+==+**********+++**#%%%%%%%%%%%@%%#.                  
                   .+888**8=:::-=*8*****88#%##+*8888*++++++++++++*8##%%%@@%@@@@%8                   
                   .-8#%%+-:::-=+*+====+*=*#8+--=+***++=======++++*8%%%%@%@@@@@%8                   
                    .-*8*:::::-=+++===--=+++++=+++*++==----====++++8#%%@%@%%8*+*+:                  
                     .=+-::::--=++++==--------======-------===++++*8%%%%%%#++*8888-                 
                      :-::::-==+++++==-::::::::::-:::::---===+++**8#%%%##8**8*+***=                 
                      :::::--=+***++=--:::::::::::------===++**8888###8888##*--+*==                 
                     :-::.:--=++++++=--::::::::-------===++**8888888888**888+--=+-.                 
                     :---==++++++++**=-::::::::::----===++*888888*****++*8*+-::+=                   
                     .-=+**8#####8888=::::::::::-----===+**888*******++***+---+-                    
                      :--=**8888888*+-::::::::------====++************=--+**+-                      
                      :---+*888*+=--:::::--:-------=====+++*****88888=------.                       
                      :-----==---------====------======++++++**88888#8*=-:.                         
                      .==------=====++++**8*=======+===+++****88888888*                             
                       =+**+**************++======+++++++****888888888=                             
                       .=-===-----==++==------===++++++++***888888888*.                             
                        :--=+++****++==-==---===++++++++****888888888*                              
                         :--==++++====---=======+++++++*****88888888*+                              
                          -------::::-------=====++++****88888888888*=                              
                          :-------:::-------===+++*****88888888888888-                              
                          .=--------=======+++****888888888888888888*:                              
                           :=+====++++*****888888888888888888888*****.                              
                             .-+++****888888888888888888888888*******.                              
                               ---=*88**************888888888**+*****                               
                              .----=*8********888888888888**+++++****.                              
                      :---.:--------=*8*******88888*******++==++****8+-.                            
                  :+#%#+:.:=---------=+**********+++++***++===++***8888*88*-                        
           ....:=88+++=:..-------------==++++======++****+====+****88888++888=.                     
.::--=++**888###+:::::::..-----------------=====+++++**++====++********8--:.:-88*=--:---:.          
%%%####8**++=-:..:::...:...-------------------===+++++++====++**********--:.::-#%%%%%%##8***-       
.:...:.:........::..:......:-------=------------============++***++++**+--:..::=::::::-=+#%*88*+-:..
...............::::::.......------------------==============+***+++++**--::..::--:::::-:.:+%#**+****
.............:::--:..........:----------------=============++**+===++*=--....::-=:::::--..:=+*8####8
:...........:::-:.............:-------------===========---=+*8*+===++=:-:....:::-::::--:...:::::::::
:..........::--:................::----------==========----=+88+=====---:......:::-:::--::...::::::::
:.........:::-::...................::-------========------=+8*====-:--:.......::::-::-:::....:::::::
........:::::::.........:.............::----====----------=*8*------::........::::--:::::..::.::::::
......::::::::....................::.......::--------------=------:::........::::::---:.......::::.:
......:--::::...........::........::..:::....:::::::::::--::-:-:::::.......:::::::::--::.....::::.::
....::--:::.............:.......:::::....:::::::::::::::::::::::.::........::-::....:--:....::::::::
.::::-::::.............:::......:::....:::.::::::::::::::::::::::::.......::--:.....:--:::.:::::.:::

80 columns

                                                                                
                                                                                
                                                                                
                          .::-=+++****888*=--:.                                 
                     :+8###8####8###%%%%%%%%%%##8+-                             
                 :-+8#%%%%%%%####%%%%%%%%%%%%%%%%###*-.                         
              .=8###%%%%%%##8#88#%##%#%#%%##%%%%%%%%%%#*-                       
               -*##%%#%%%%%%%%%#######%%%%%%%%%%%%%%%%%%#8-                     
                :+*88###8******++++++**8888###%%@@@@@@@@%%%8:                   
                 :+8#8*=--::::::::::----==+++++*8#%@@@@@@@%%#=                  
                 -#8=--::::::::::::::--------===++*8#%%%%%%%%#+                 
                 -+-::::::::::::::::------=====++**8#%%%%%%%%%%*                
                  -:::::::::::::::::------=====++*88##%%%%%%%%%%-               
                 :---::::::--++++******++++====++*8##%%@%%%%@%%%+               
                =+*++-:---=*8##%%##8*****888*+++++*##%%@@@%%@@%%8.              
               *8###8=-::-+*########8888****88**++*8#%%%%%%%%%%%#.              
               -+*88#*:::-+*888####8*+++********++**#%%%%%%%%@@%*               
                +8#8*+::-=***+++8*%#8=+*88*+++++++++*8#%%%@%@@@%+               
                :*8#-:::-=++==-===++===+**+==--===+++*#%%@@%@%#8=               
                 :+-:::--++++=----========-----===+++*#%%%%#*+*88+              
                 .-:::--=++++=-:::::::::::::---=++***#%%##8888++*+:             
                 :::::-=+**++=-::::::::-----===+**888888888##+-=+-.             
                 --:-==+++++*+-:::::::-----==++*88888888*+**+=:==.              
                 :=++*8###888*-:::::::----===+*888*****++**+--==                
                 .:-=*888888*=::::::------===++********+--=++=.                 
                 .---=**+==-------------====++++***8888+=---.                   
                  -=--------====+++=========++++**888888*.                      
                  -+++++**********+=====++++++***8888888-                       
                   --=======++==-----==++++++***8888888*.                       
                    --=+***++==-=--===+++++++****888888*                        
                    .--------------====++++***888888888+                        
                     ------:::-----===+++****8888888888=                        
                     :==---======+++***888888888888888*-                        
                      :=+++++***8888888888888888888****:                        
                         -=+*8*******88***8888888******.                        
                        .---+88******8888888888**+++***:                        
                .---::-------+*******888*******+==++**8+-:.                     
              =8##*:.---------=+**++*++==++***+==++**8888*8#*:                  
  ...:--=++*8*=::.:..------------======+++***+===+*****88*=--=*=::....          
8#####8**++=:.::..:..:--------------===++++++===++*******+-:.:-8%####88*+=.     
............:::.:.....------=---------==========+***+++**=-:.::-:::::-=8%88*+=--
...........:::::......:--------------===========+**++++*+-:...:--::::-:.=##88**8
:.........::-::.........-----------==========-==*8+===++:-....::-:::--:.::--====
.........::-:............::--------=========---+8*=====--:....::-:::-::...::::::
:.......::-:................::-----======------+8+==---::......::--:-::....:::::
......::::::.......:............::--===-------=+*-----::......::::--::.....:::::
.....::::::.................:..:....::::::::--::---::::......::::::--:....::::.:
...::-:::..........:......:::....::::::::::::::::::.::......:--:...:-::...:::.::