#include <iostream>
#include <vector>
#include <math.h>
int CalculateChars( std:: string tag)
{
int Count= 0 ;
for ( unsigned int i= 0 ; i< tag.length ( ) ; ++ i)
if ( tag[ i] ! = ' ' ) Count++ ;
return Count;
}
void FillTab( int tab[ ] ,const int Size)
{
for ( int i= 0 ; i< Size; ++ i) tab[ i] = 0 ;
}
bool isNotWas( std:: vector < char > a,char b)
{
for ( unsigned int i= 0 ; i< a.size ( ) ; ++ i)
if ( a[ i] == b) return false ;
return true ;
}
void CalculateFrequencyChars( std:: string tag,int tab[ ] )
{
std:: vector < char > itWas;
int Count= 0 ;
for ( unsigned int j= 0 ; j< tag.length ( ) ; ++ j)
{
if ( isNotWas( itWas,tag[ j] ) )
{
for ( unsigned int i= 0 ; i< tag.length ( ) ; ++ i)
{
if ( tag[ j] == tag[ i] ) Count++ ;
}
itWas.push_back ( tag[ j] ) ;
tab[ ( int ) tag[ j] % 65 ] = Count;
Count= 0 ;
}
}
}
void fillPercent( int sumOfChar,int all,int percent[ ] ,int i)
{
percent[ i] = round( sumOfChar* 100 / all) ;
}
int SearchMax( int percent[ ] ,const int amountChars)
{
int Max= percent[ 0 ] ;
int ind= 0 ;
for ( int i= 1 ; i< amountChars; ++ i)
if ( Max< percent[ i] ) { Max= percent[ i] ; ind= i; }
return ind;
}
void ChangePercent( int percent[ ] ,int Max,int tab[ ] ,const int amountChars)
{
for ( int i= 0 ; i< amountChars; ++ i)
{
if ( tab[ i] > 0 && percent[ i] == 0 )
percent[ i] = 1 ;
Max= SearchMax( percent,amountChars) ;
}
int sum= 0 ;
do
{
for ( int i= 0 ; i< amountChars; ++ i)
sum+ = percent[ i] ;
if ( sum> 100 ) percent[ Max] -- ;
else if ( sum< 100 ) percent[ Max] ++ ;
} while ( sum== 0 ) ;
}
std:: string writeStars( int percent)
{
std:: string stars= "" ;
for ( int i= 0 ; i< percent; ++ i)
stars+ = '*' ;
return stars;
}
void WriteChars( int tab[ ] ,int allChars,const int amountChars)
{
int percent[ amountChars] ;
for ( int i= 0 ; i< amountChars; ++ i)
fillPercent( tab[ i] ,allChars,percent,i) ;
int Max= SearchMax( percent,amountChars) ;
ChangePercent( percent,Max,tab,amountChars) ;
for ( int i= 0 ,j= 65 ; j<= 90 ; ++ i,++ j)
std:: cout << ( char ) j<< ' ' << percent[ i] << ' ' << writeStars( percent[ i] ) << std:: endl ;
}
int main( )
{
const int amountChars= 26 ;
std:: string tag;
std:: getline ( std:: cin ,tag) ;
int sumOfChars= CalculateChars( tag) ;
int tab[ amountChars] ;
FillTab( tab,amountChars) ;
CalculateFrequencyChars( tag,tab) ;
WriteChars( tab,sumOfChars,amountChars) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWF0aC5oPgppbnQgQ2FsY3VsYXRlQ2hhcnMoc3RkOjpzdHJpbmcgdGFnKQp7CiAgICBpbnQgQ291bnQ9MDsKICAgIGZvcih1bnNpZ25lZCBpbnQgaT0wOyBpPHRhZy5sZW5ndGgoKTsgKytpKQogICAgICAgIGlmKHRhZ1tpXSE9JyAnKUNvdW50Kys7CiAgICByZXR1cm4gQ291bnQ7Cn0Kdm9pZCBGaWxsVGFiKGludCB0YWJbXSxjb25zdCBpbnQgU2l6ZSkKewogICAgZm9yKGludCBpPTA7IGk8U2l6ZTsgKytpKXRhYltpXT0wOwp9CmJvb2wgaXNOb3RXYXMoc3RkOjp2ZWN0b3I8Y2hhcj5hLGNoYXIgYikKewogICAgZm9yKHVuc2lnbmVkIGludCBpPTA7IGk8YS5zaXplKCk7ICsraSkKICAgICAgICBpZihhW2ldPT1iKXJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CnZvaWQgQ2FsY3VsYXRlRnJlcXVlbmN5Q2hhcnMoc3RkOjpzdHJpbmcgdGFnLGludCB0YWJbXSkKewogICAgc3RkOjp2ZWN0b3I8Y2hhcj5pdFdhczsKICAgIGludCBDb3VudD0wOwogICAgZm9yKHVuc2lnbmVkIGludCBqPTA7IGo8dGFnLmxlbmd0aCgpOyArK2opCiAgICB7CiAgICAgICAgaWYoaXNOb3RXYXMoaXRXYXMsdGFnW2pdKSkKICAgICAgICB7CiAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaT0wOyBpPHRhZy5sZW5ndGgoKTsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZih0YWdbal09PXRhZ1tpXSlDb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGl0V2FzLnB1c2hfYmFjayh0YWdbal0pOwogICAgICAgICAgICB0YWJbKGludCl0YWdbal0lNjVdPUNvdW50OwogICAgICAgICAgICBDb3VudD0wOwogICAgICAgIH0KICAgIH0KfQp2b2lkIGZpbGxQZXJjZW50KGludCBzdW1PZkNoYXIsaW50IGFsbCxpbnQgcGVyY2VudFtdLGludCBpKQp7CiAgICBwZXJjZW50W2ldPXJvdW5kKHN1bU9mQ2hhcioxMDAvYWxsKTsKfQppbnQgU2VhcmNoTWF4KGludCBwZXJjZW50W10sY29uc3QgaW50IGFtb3VudENoYXJzKQp7CiAgICBpbnQgTWF4PXBlcmNlbnRbMF07CiAgICBpbnQgaW5kPTA7CiAgICBmb3IoaW50IGk9MTtpPGFtb3VudENoYXJzOysraSkKICAgICAgICBpZihNYXg8cGVyY2VudFtpXSl7TWF4PXBlcmNlbnRbaV07aW5kPWk7fQogICAgcmV0dXJuIGluZDsKfQp2b2lkIENoYW5nZVBlcmNlbnQoaW50IHBlcmNlbnRbXSxpbnQgTWF4LGludCB0YWJbXSxjb25zdCBpbnQgYW1vdW50Q2hhcnMpCnsKICAgIGZvcihpbnQgaT0wO2k8YW1vdW50Q2hhcnM7KytpKQogICAgewogICAgICAgIGlmKHRhYltpXT4wICYmIHBlcmNlbnRbaV09PTApCiAgICAgICAgICAgIHBlcmNlbnRbaV09MTsKICAgICAgICBNYXg9U2VhcmNoTWF4KHBlcmNlbnQsYW1vdW50Q2hhcnMpOwogICAgfQogICAgaW50IHN1bT0wOwogICAgZG8KICAgIHsKICAgIGZvcihpbnQgaT0wO2k8YW1vdW50Q2hhcnM7KytpKQogICAgICAgIHN1bSs9cGVyY2VudFtpXTsKICAgIGlmKHN1bT4xMDApcGVyY2VudFtNYXhdLS07CiAgICBlbHNlIGlmKHN1bTwxMDApcGVyY2VudFtNYXhdKys7CiAgICB9d2hpbGUoc3VtPT0wKTsKfQpzdGQ6OnN0cmluZyB3cml0ZVN0YXJzKGludCBwZXJjZW50KQp7CiAgICBzdGQ6OnN0cmluZyBzdGFycz0iIjsKICAgIGZvcihpbnQgaT0wO2k8cGVyY2VudDsrK2kpCiAgICAgICAgc3RhcnMrPScqJzsKICAgIHJldHVybiBzdGFyczsKfQp2b2lkIFdyaXRlQ2hhcnMoaW50IHRhYltdLGludCBhbGxDaGFycyxjb25zdCBpbnQgYW1vdW50Q2hhcnMpCnsKICAgIGludCBwZXJjZW50W2Ftb3VudENoYXJzXTsKICAgIGZvcihpbnQgaT0wO2k8YW1vdW50Q2hhcnM7KytpKQogICAgICAgIGZpbGxQZXJjZW50KHRhYltpXSxhbGxDaGFycyxwZXJjZW50LGkpOwoKICAgIGludCBNYXg9U2VhcmNoTWF4KHBlcmNlbnQsYW1vdW50Q2hhcnMpOwogICAgQ2hhbmdlUGVyY2VudChwZXJjZW50LE1heCx0YWIsYW1vdW50Q2hhcnMpOwoKICAgIGZvcihpbnQgaT0wLGo9NjU7ajw9OTA7KytpLCsraikKICAgICAgICBzdGQ6OmNvdXQ8PChjaGFyKWo8PCcgJzw8cGVyY2VudFtpXTw8JyAnPDx3cml0ZVN0YXJzKHBlcmNlbnRbaV0pPDxzdGQ6OmVuZGw7Cn0KaW50IG1haW4oKQp7CiAgICBjb25zdCBpbnQgYW1vdW50Q2hhcnM9MjY7CiAgICBzdGQ6OnN0cmluZyB0YWc7CiAgICBzdGQ6OmdldGxpbmUoc3RkOjpjaW4sdGFnKTsKICAgIGludCBzdW1PZkNoYXJzPUNhbGN1bGF0ZUNoYXJzKHRhZyk7CiAgICBpbnQgdGFiW2Ftb3VudENoYXJzXTsKICAgIEZpbGxUYWIodGFiLGFtb3VudENoYXJzKTsKICAgIENhbGN1bGF0ZUZyZXF1ZW5jeUNoYXJzKHRhZyx0YWIpOwogICAgV3JpdGVDaGFycyh0YWIsc3VtT2ZDaGFycyxhbW91bnRDaGFycyk7CiAgICByZXR1cm4gMDsKfQo=
stdin
QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkJCQkNDQ0NERERERUVFRUZGRkZHR0dHSEhISElJSUlKSkpKS0tLS0xMTExNTU1NTk5OTk9PT09QUFBQUVFRUVJSUlJTU1NTVFRUVFVVVVVWVlZWV1dXV1hYWFhZWVlZWlpaWg==
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ