import java.io.*;
import java.util.*;
import java.text.*;

public class NameAnalyzer {

	public static void main(String[] args) throws IOException {

		final int MAX_LENGTH = 15;

		Scanner scan = new Scanner(System.in);

		System.out.println("Input name of data file: ");
		String filename = scan.nextLine();

		Scanner filescan = new Scanner(new File(filename));

		int[] count = new int[MAX_LENGTH+1];
		String[] popularName = new String[MAX_LENGTH+1];
		int[] popularRank = new int[MAX_LENGTH+1];
		int total = 0;

		while (filescan.hasNextLine()) {
			String name = filescan.next();
			int rank = filescan.nextInt();
			filescan.nextLine();
			int len = name.length();
			count[len]++;
			total++;
			if (popularRank[len] == 0 || rank < popularRank[len]) {
				popularName[len] = name;
				popularRank[len] = rank;
			}
		}

		System.out.println("MOST POPULAR NAMES: ");
		for (int i = 1; i <= MAX_LENGTH; i++) {
			System.out.print("Length " + i + ": ");
			if (popularRank[i] == 0)		
				System.out.println("none");
			else
				System.out.println(popularName[i]);
		}

		
		DecimalFormat fmt = new DecimalFormat("0.000");
		System.out.println();
		System.out.println("DISTRIBUTION OF NAMES (Total = " + total + ")");
                for (int i = 1; i <= MAX_LENGTH; i++) {
                        System.out.print("Length " + i + ":\t|");
			double percentage = (double)count[i]/total * 100.0;
			printStars((int)(Math.round(percentage)));
			System.out.println(fmt.format(percentage) + "%");
                }        

	}

	public static void printStars(int percentage) {
		for (int i = 1; i <= percentage; i++)
			System.out.print("*");
	}
}	
