#include <cstdio> 
#include<iostream> 
#include <sstream> 
#include <chrono> 
 
std:: chrono :: time_point < std:: chrono :: steady_clock >  hClock( ) 
{ 
    return  std:: chrono :: steady_clock :: now ( ) ; 
} 
 
std:: uint32_t  TimeDuration( std:: chrono :: time_point < std:: chrono :: steady_clock >  Time) 
{ 
    return  std:: chrono :: duration_cast < std:: chrono :: nanoseconds > ( hClock( )  -  Time) .count ( ) ; 
} 
 
 
void  Benchmark( const  char *  Name, std:: string  & str, void ( * func) ( std:: string  & str) ) 
{ 
    auto  time  =  hClock( ) ; 
    for  ( int  i =  0 ;  i <  100 ;  ++ i) 
    { 
        func( str) ; 
        str.clear ( ) ; 
    } 
    std:: cout << Name<< " took: " << TimeDuration( time )  /  100 << " nano-seconds.\n " ; 
} 
 
void  unlocked_bench( std:: string  & str) 
{ 
    char  c =  '0' ; 
    while ( ( c =  getchar_unlocked( ) )  &&  ( c ! =  - 1  &&  c ! =  '\n '  &&  c ! =  '\r ' ) ) 
    { 
        str + =  c; 
    } 
} 
 
void  getchar_bench( std:: string  & str) 
{ 
    char  c =  '0' ; 
    while ( ( c =  getchar ( ) )   &&  ( c ! =  - 1  &&  c ! =  '\n '  &&  c ! =  '\r ' ) ) 
    { 
        str + =  c; 
    } 
} 
 
void  getline_bench( std:: string  & str) 
{ 
    std:: cin .getline ( & str[ 0 ] , str.size ( ) ) ; 
} 
 
void  scanf_bench( std:: string  & str) 
{ 
    scanf ( "%[^\n ]100s" , & str[ 0 ] ) ; 
} 
 
void  fgets_bench( std:: string  & str) 
{ 
    fgets ( & str[ 0 ] , str.size ( ) , stdin ) ; 
} 
 
void  cinread_bench( std:: string  & str) 
{ 
	std:: cin .read ( & str[ 0 ] , str.size ( ) ) ; 
} 
 
int  main( ) 
{ 
    std:: string  str; 
    str.reserve ( 100 ) ; 
 
    Benchmark( "getchar_unlocked" , str, unlocked_bench) ; 
    Benchmark( "getchar" , str, getchar_bench) ; 
    Benchmark( "getline" , str, getline_bench) ; 
    Benchmark( "scanf" , str, scanf_bench) ; 
    Benchmark( "fgets" , str, fgets_bench) ; 
    Benchmark( "cinread" , str, cinread_bench) ; 
 
    return  0 ; 
} 
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgoKc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8c3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jaz4gaENsb2NrKCkKewogICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwp9CgpzdGQ6OnVpbnQzMl90IFRpbWVEdXJhdGlvbihzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrPiBUaW1lKQp7CiAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzPihoQ2xvY2soKSAtIFRpbWUpLmNvdW50KCk7Cn0KCgp2b2lkIEJlbmNobWFyayhjb25zdCBjaGFyKiBOYW1lLCBzdGQ6OnN0cmluZyAmc3RyLCB2b2lkKCpmdW5jKShzdGQ6OnN0cmluZyAmc3RyKSkKewogICAgYXV0byB0aW1lID0gaENsb2NrKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKQogICAgewogICAgICAgIGZ1bmMoc3RyKTsKICAgICAgICBzdHIuY2xlYXIoKTsKICAgIH0KICAgIHN0ZDo6Y291dDw8TmFtZTw8IiB0b29rOiAiPDxUaW1lRHVyYXRpb24odGltZSkgLyAxMDA8PCIgbmFuby1zZWNvbmRzLlxuIjsKfQoKdm9pZCB1bmxvY2tlZF9iZW5jaChzdGQ6OnN0cmluZyAmc3RyKQp7CiAgICBjaGFyIGMgPSAnMCc7CiAgICB3aGlsZSgoYyA9IGdldGNoYXJfdW5sb2NrZWQoKSkgJiYgKGMgIT0gLTEgJiYgYyAhPSAnXG4nICYmIGMgIT0gJ1xyJykpCiAgICB7CiAgICAgICAgc3RyICs9IGM7CiAgICB9Cn0KCnZvaWQgZ2V0Y2hhcl9iZW5jaChzdGQ6OnN0cmluZyAmc3RyKQp7CiAgICBjaGFyIGMgPSAnMCc7CiAgICB3aGlsZSgoYyA9IGdldGNoYXIoKSkgICYmIChjICE9IC0xICYmIGMgIT0gJ1xuJyAmJiBjICE9ICdccicpKQogICAgewogICAgICAgIHN0ciArPSBjOwogICAgfQp9Cgp2b2lkIGdldGxpbmVfYmVuY2goc3RkOjpzdHJpbmcgJnN0cikKewogICAgc3RkOjpjaW4uZ2V0bGluZSgmc3RyWzBdLCBzdHIuc2l6ZSgpKTsKfQoKdm9pZCBzY2FuZl9iZW5jaChzdGQ6OnN0cmluZyAmc3RyKQp7CiAgICBzY2FuZigiJVteXG5dMTAwcyIsICZzdHJbMF0pOwp9Cgp2b2lkIGZnZXRzX2JlbmNoKHN0ZDo6c3RyaW5nICZzdHIpCnsKICAgIGZnZXRzKCZzdHJbMF0sIHN0ci5zaXplKCksIHN0ZGluKTsKfQoKdm9pZCBjaW5yZWFkX2JlbmNoKHN0ZDo6c3RyaW5nICZzdHIpCnsKCXN0ZDo6Y2luLnJlYWQoJnN0clswXSwgc3RyLnNpemUoKSk7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmcgc3RyOwogICAgc3RyLnJlc2VydmUoMTAwKTsKCiAgICBCZW5jaG1hcmsoImdldGNoYXJfdW5sb2NrZWQiLCBzdHIsIHVubG9ja2VkX2JlbmNoKTsKICAgIEJlbmNobWFyaygiZ2V0Y2hhciIsIHN0ciwgZ2V0Y2hhcl9iZW5jaCk7CiAgICBCZW5jaG1hcmsoImdldGxpbmUiLCBzdHIsIGdldGxpbmVfYmVuY2gpOwogICAgQmVuY2htYXJrKCJzY2FuZiIsIHN0ciwgc2NhbmZfYmVuY2gpOwogICAgQmVuY2htYXJrKCJmZ2V0cyIsIHN0ciwgZmdldHNfYmVuY2gpOwogICAgQmVuY2htYXJrKCJjaW5yZWFkIiwgc3RyLCBjaW5yZWFkX2JlbmNoKTsKCiAgICByZXR1cm4gMDsKfQ==
				
				 
			
				
			
			
				
	 
SGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmUKSGVsbG8gVGhlcmU=
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There