import java.util.HashSet;
import java.util.Scanner;
import java.io.Reader;
import java.lang.reflect.Array;

/**
 * KeyboardAnalysis Lab. Compare QWERTY and Dvorak keyboards.
 * This solution needs refactoring.
 * @author YOUR NAMES HERE
 */
public class KeyboardLab
{
   
    private HashSet<Character> qTopRow;
    private HashSet<Character> qMiddleRow;
    private HashSet<Character> qBottomRow;
    private HashSet<Character> dTopRow;
    private HashSet<Character> dMiddleRow;
    private HashSet<Character> dBottomRow;
    
    private int qTopRowCount;
    private int qMiddleRowCount;
    private int qBottomRowCount;
    private int dTopRowCount;
    private int dMiddleRowCount;
    private int dBottomRowCount;
    
    /**
     *  Initialize the sets representing keyboard rows
     */
    private void createSets()
    {
        this.qTopRow = new HashSet<Character>();
        qTopRow.add('q');
        qTopRow.add('w');
        qTopRow.add('e');
        qTopRow.add('r');
        qTopRow.add('t');
        qTopRow.add('y');
        qTopRow.add('u');
        qTopRow.add('i');
        qTopRow.add('o');
        qTopRow.add('p');
        this.qMiddleRow = new HashSet<Character>();
        qMiddleRow.add('a');
        qMiddleRow.add('s');
        qMiddleRow.add('d');
        qMiddleRow.add('f');
        qMiddleRow.add('g');
        qMiddleRow.add('h');
        qMiddleRow.add('j');
        qMiddleRow.add('k');
        qMiddleRow.add('l');
        this.qBottomRow = new HashSet<Character>();
        qBottomRow.add('z');
        qBottomRow.add('x');
        qBottomRow.add('c');
        qBottomRow.add('v');
        qBottomRow.add('b');
        qBottomRow.add('n');
        qBottomRow.add('m');
        this.dTopRow = new HashSet<Character>();
        dTopRow.add('p');
        dTopRow.add('y');
        dTopRow.add('f');
        dTopRow.add('g');
        dTopRow.add('c');
        dTopRow.add('r');
        dTopRow.add('l');
        this.dMiddleRow = new HashSet<Character>();
        dMiddleRow.add('a');
        dMiddleRow.add('o');
        dMiddleRow.add('e');
        dMiddleRow.add('u');
        dMiddleRow.add('i');
        dMiddleRow.add('d');
        dMiddleRow.add('h');
        dMiddleRow.add('t');
        dMiddleRow.add('n');
        dMiddleRow.add('s');
        this.dBottomRow = new HashSet<Character>();
        dBottomRow.add('q');
        dBottomRow.add('j');
        dBottomRow.add('k');
        dBottomRow.add('x');
        dBottomRow.add('b');
        dBottomRow.add('m');
        dBottomRow.add('w');
        dBottomRow.add('v');
        dBottomRow.add('z');
        
        // reset the counts
        dBottomRowCount = 0;
        qTopRowCount = 0;
        qMiddleRowCount = 0;
        qBottomRowCount = 0;
        dTopRowCount = 0;
        dMiddleRowCount = 0;
        dBottomRowCount = 0;       
    }
    
    /**
     *  Run the analysis.
     */
    public void run(Reader textinput)
    {
        String line;
        
        createSets();
        Scanner input = new Scanner(textinput);
            
        // Read all lines from the input
        while(input.hasNext())
        {
            line = input.next().toLowerCase();
            // process all letters on a line
            for (char letter : line.toCharArray())
            {
                // Determine which row the letter is on
                if (qTopRow.contains(letter))
                {
                    qTopRowCount++;
                }
                if (qMiddleRow.contains(letter))
                {
                    qMiddleRowCount++;
                }
                if (qBottomRow.contains(letter))
                {
                    qBottomRowCount++;
                }
                if (dTopRow.contains(letter))
                {
                    dTopRowCount++;
                }
                if (dMiddleRow.contains(letter))
                {
                    dMiddleRowCount++;
                }
                if (dBottomRow.contains(letter))
                {
                    dBottomRowCount++;
                }
            }
        }
        
        int total = qTopRowCount + qMiddleRowCount + qBottomRowCount;
        
        System.out.println("             QWERTY            Dvorak");
        System.out.println("             count      %      count    %");
        System.out.println("Top Row      " + qTopRowCount    + "\t\t" + (qTopRowCount *100/total)    + "  " + " \t" + dTopRowCount    + "\t" + (dTopRowCount *100/total)   );
        System.out.println("HomeRow      " + qMiddleRowCount + "\t\t" + (qMiddleRowCount *100/total) + "  " + " \t" + dMiddleRowCount + "\t" + (dMiddleRowCount *100/total));
        System.out.println("Bottom Row   " + qBottomRowCount + "\t\t" + (qBottomRowCount *100/total) + "  " + " \t" + dBottomRowCount + "\t" + (dBottomRowCount *100/total));
        System.out.println("Total        " + total);
    }

    public static void main(String[] args) throws java.io.FileNotFoundException
    {
         KeyboardLab lab = new KeyboardLab();
         lab.run(new java.io.FileReader(args[0]));
    }
    /* a simple unit test */
    public static void testOne()
    {
        String allLetters  = "pack my box with five dozen liquor jugs";
        java.io.StringReader sr = new java.io.StringReader(allLetters);
        KeyboardLab app = new KeyboardLab();
        app.run(sr);
    }
   
}