#include <iostream>
#include <vector>
#include <conio.h>

using namespace std;

int main()
{
    int i, j;
    size_t number_count;
    const size_t screen_width = 80;
    const size_t max_asterisk = screen_width - 3 - 1;

    cerr << "Enter number count : ";
    cin >> number_count;
    vector <double> numbers(number_count);
    cerr << "Enter numbers : " << endl;
    for (i = 0; i < number_count; i++)
    {
        cin >> numbers[i];
    }
    size_t bin_count;
    cerr << "Enter bin count : ";
    cin >> bin_count;
    vector <size_t> bins(bin_count);

    double min = numbers[0];
    double max = numbers[0];
    for (double x : numbers)
    {
        if (x < min)
        {
            min = x;
        }
        else if (x > max)
        {
            max = x;
        }
    }

    double bin_size = (max - min) / bin_count;

    for (size_t i = 0; i < number_count; i++)
    {
        bool found = false;
        for (size_t j = 0; (j < bin_count - 1) && !found; j++)
        {
            auto lo = min + j * bin_size;
            auto hi = min + (j + 1) * bin_size;
            if ((lo <= numbers[i]) && (numbers[i] < hi))
            {
                bins[j] ++;
                found = true;
            }
        }
        if (!found)
        {
            bins[bin_count - 1]++;
        }
    }

    double max_count;
    max_count = bins[0];
    for (i=0; i< bin_count; i++)
    {
        if (max_count<bins[i])
        {
            max_count=bins[i];
        }
    }

    size_t height;
    bool flag = false;
    if(max_count>max_asterisk)
    {
        flag=true;
    }
    for (j = 0; j < bin_count; j++)
    {
        if (bins[j] < 100)
        {
            cout << " ";
        }
        if (bins[j] < 10)
        {
            cout << " ";
        }
        cout << bins[j] << "|";

        if (flag)
        {
            height = max_asterisk * (static_cast<double>(bins[j]) / max_count);
        }
        else
        {
            height=bins[j];
        }
        for (i = 0; i < height; i++)
        {
            cout << "*";
        }
        cout << endl;
    }
    _getch();
    return 0;
}