/** Maintain info about a worker */
public class W {
    private String lastName; // worker's last name (not null)
    private int ssn; // worker's social security number
    private W boss; // worker's boss (null if none)

    /** Constructor: worker with last name n, SSN s, boss b (null if none).
     * Precondition:  n not null,  s in 0..999999999 */
    public W(String n, int s, W b) {
        lastName= n;
        ssn= s;
        boss= b;
    }
    
    /** = worker's last name */
    public String getLname() {
        return lastName;
    }

    /** = last 4 SSN digits */
    public String getSsn() {
        String s= "0000" + ssn;
        return s.substring(s.length() - 4);
    }

    /** = worker's boss (null if none) */
    public W getBoss() {
        return boss;
    }

    /** Set boss to b.  */
    public void setBoss(W b) {
        boss= b;
    }
    
    public String toString() {
      return "Worker " + lastName + 
        " has SSN ???-??-" + getSsn() +
        ( boss == null ? "" : " and boss " + boss.lastName );
    }
    
    /** "x is y's boss" 
      * pre: x and y are not null */
    public static boolean isBoss(W x, W y) {
      return x == y.boss;
    }
    
     /** "this is other's boss"
      * prec: other is not null */
    public boolean isBossOf(W other) {
      return this == other.boss;
    }
    
}
