/* paragrafo 1.6    pagina 20
   istogramma delle frequenze dei diversi caratteri contenuti nel testo in ingresso
*/
#include <stdio.h>
#define LETTERE    26
#define CIFRE 10

main()
{
    int c, i, riga, col;
    int max;
    int alfabeto[LETTERE];
    int numeri[CIFRE];
    int altro;
    
    for (i = 0; i < LETTERE; ++i)
        alfabeto[i] = 0;
    for (i = 0; i < CIFRE; ++i)
        numeri[i] = 0;
    altro = 0;
    while ((c = getchar()) != EOF) {
        if (c >= 'A' && c <= 'Z')
            ++alfabeto[c - 'A'];
        else
            if (c >= 'a' && c <='z')
                ++alfabeto[c - 'a'];
            else
                if (c >= '0' && c <= '9')
                    ++numeri[c - '0'];
                else
                    ++altro;
    }
    
    max = 0;
    for (i = 0; i < LETTERE; ++i) {
        if (alfabeto[i] > max)
            max = alfabeto[i];
        if (alfabeto[i] > 0)
            printf("carattere %c compare %d\n", i+'a', alfabeto[i]);
    }
    printf("altri caratteri %d\n", altro);
    
    for (riga = 0; riga < max; ++riga) {
        printf("%4d | ", max - riga);
        for (col = 0; col < LETTERE; ++col)
            if (alfabeto[col] >= max - riga)
                putchar(col + 'a'); 
            else
                putchar(' ');
        putchar('\n');
    }
    
    max = 0;
    for (i = 0; i < CIFRE; ++i) {
        if (numeri[i] > max)
            max = numeri[i];
        if (numeri[i] > 0)
            printf("carattere %c compare %d\n", i+'0', numeri[i]);
    }
    
    for (riga = 0; riga < max; ++riga) {
        printf("%4d | ", max - riga);
        for (col = 0; col < CIFRE; ++col)
            if (numeri[col] >= max - riga)
                putchar(col + '0');
            else
                putchar(' ');
        putchar('\n');
    }
}