#include <string> 
#include <iostream> 
#include <cstddef> 
#include <memory> 
#include <utility> 
 
std:: unique_ptr < int [ ] >  count_char( const  std:: string &  s) 
{ 
	// consider 128 ASCII decimal and their coresponding character codes 
	std:: unique_ptr < int [ ] >  charASCIIArray =  std:: unique_ptr < int [ ] > ( new  int [ 128 ] { 0 } ) ; 
	for  ( const  auto &  it :  s) 
	{ 
		if  ( ( 'A'  <=  it &&  it <=  'Z' )  ||      // if char between (A,B,....,Z) or 
			( 'a'  <=  it &&  it <=  'z' ) )        //         between (a,b,....,z) 
			charASCIIArray[ static_cast < int > ( it) ] ++ ;  // we count each corresponding array then 
	} 
	return  std:: move ( charASCIIArray) ; 
} 
 
int  main( ) 
{ 
	std:: string  userinput =  "random words WITH *- aLl" ; 
 
	std:: unique_ptr < int [ ] >  charASCIIArray =  count_char( userinput) ; 
	for  ( std:: size_t  index =  0 ;  index <  128 ;  ++ index) 
		if  ( charASCIIArray[ index]  ! =  0 ) 
			std:: cout  <<  "Letter "  <<  static_cast < char > ( index)   // convert back to char 
			<<  " occured "  <<  charASCIIArray[ index]  <<  " times.\n " ; 
 
	return  0 ; 
} 
 
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGRlZj4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IGNvdW50X2NoYXIoY29uc3Qgc3RkOjpzdHJpbmcmIHMpCnsKCS8vIGNvbnNpZGVyIDEyOCBBU0NJSSBkZWNpbWFsIGFuZCB0aGVpciBjb3Jlc3BvbmRpbmcgY2hhcmFjdGVyIGNvZGVzCglzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IGNoYXJBU0NJSUFycmF5ID0gc3RkOjp1bmlxdWVfcHRyPGludFtdPihuZXcgaW50WzEyOF17MH0pOwoJZm9yIChjb25zdCBhdXRvJiBpdCA6IHMpCgl7CgkJaWYgKCgnQScgPD0gaXQgJiYgaXQgPD0gJ1onKSB8fCAgICAgLy8gaWYgY2hhciBiZXR3ZWVuIChBLEIsLi4uLixaKSBvcgoJCQkoJ2EnIDw9IGl0ICYmIGl0IDw9ICd6JykpICAgICAgIC8vICAgICAgICAgYmV0d2VlbiAoYSxiLC4uLi4seikKCQkJY2hhckFTQ0lJQXJyYXlbc3RhdGljX2Nhc3Q8aW50PihpdCldKys7IC8vIHdlIGNvdW50IGVhY2ggY29ycmVzcG9uZGluZyBhcnJheSB0aGVuCgl9CglyZXR1cm4gc3RkOjptb3ZlKGNoYXJBU0NJSUFycmF5KTsKfQoKaW50IG1haW4oKQp7CglzdGQ6OnN0cmluZyB1c2VyaW5wdXQgPSAicmFuZG9tIHdvcmRzIFdJVEggKi0gYUxsIjsKCglzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IGNoYXJBU0NJSUFycmF5ID0gY291bnRfY2hhcih1c2VyaW5wdXQpOwoJZm9yIChzdGQ6OnNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgMTI4OyArK2luZGV4KQoJCWlmIChjaGFyQVNDSUlBcnJheVtpbmRleF0gIT0gMCkKCQkJc3RkOjpjb3V0IDw8ICJMZXR0ZXIgIiA8PCBzdGF0aWNfY2FzdDxjaGFyPihpbmRleCkgIC8vIGNvbnZlcnQgYmFjayB0byBjaGFyCgkJCTw8ICIgb2NjdXJlZCAiIDw8IGNoYXJBU0NJSUFycmF5W2luZGV4XSA8PCAiIHRpbWVzLlxuIjsKCglyZXR1cm4gMDsKfQo=