import java.util.LinkedList;
import java.util.Collection;

class Employee {
  private int hours;
  public Employee(int hours) {
    this.hours = hours;
  }
  public int getHours() {
    return hours;
  }
}

class SuperEmployee extends Employee {
  public SuperEmployee(int hours) {
    super(hours);
  }
}

class Manager extends Employee {
  private int numSubordinates;
  public Manager(int hours, int numSubs) {
    super(hours);
    numSubordinates = numSubs;
  }
  public int getNumSubs() {
    return numSubordinates;
  }
}

class Guard extends Employee {
  private double dangerFactor;
  public Guard(int hours, double df) {
    super(hours);
    dangerFactor = df;
  }
  public double getDangerFactor() {
    return dangerFactor;
  }
}

public class Payment1 {
  private static double getPayroll(Collection<Employee> staff) {
    double payroll = 0.0;
    for (Employee e : staff) {
      if (e instanceof Manager) {
        payroll += 100.0 * ((Manager)e).getNumSubs() + 20.0 * e.getHours();
      } else if (e instanceof Guard) {
        payroll += 80.0 * ((Guard)e).getDangerFactor() + 16.0 * e.getHours();
      } else if (e instanceof SuperEmployee) {
        payroll += 18.0 * e.getHours() + 80.0;
      } else {
        payroll += 12.0 * e.getHours();
      }
    }
    return payroll;
  }

  private static Collection<Employee> createMockStaff() {
    Collection<Employee> c = new LinkedList<Employee>();
    Employee e1 = new Employee(40);
    c.add(e1);
    Employee e2 = new Employee(35);
    c.add(e2);
    Employee m = new Manager(40, 2);
    c.add(m);
    Employee g1 = new Guard(30, 1.6);
    c.add(g1);
    Employee g2 = new Guard(40, 1.2);
    c.add(g2);
    Employee s = new SuperEmployee(35);
    c.add(s);
    return c;
  }

  public static void main(String args[]) {
    Collection<Employee> staff = createMockStaff();
    System.out.println("Pay = " + getPayroll(staff));
  }
}
