class PersonHandler {
    public Person getNthPerson(SimpleList<Person> list, int n) {
	list.reset();
	for(int i=0; i<n; i++) {
	    list.next();
	}
	return list.next();
    }
    
    public int indexOf(Person p, SimpleList<Person> list) {
	int count=0;
	for(Person q : list) {
	    if(q == p) return count;
	    count++;
	}
	return -1;
    }


    public void sortBySSNAscending(SimpleList<Person> people) {
	SimpleList<Person> result = new SimpleList<Person>();

	for(Person p : people) {
	    Person q = findFirstBigger(p, result);
	    if(q != null) {
		result.remove();
		result.add(p);
		result.add(q);
	    } else {
		result.add(p);
	    }
	}
	
	people.reset();
	while(people.hasNext()) {
	    people.next();
	    people.remove();
	}
	
	for(Person p : result) {
	    people.add(p);
	}
    }
    public void sortBySSNDescending(SimpleList<Person> people) {
	SimpleList<Person> result = new SimpleList<Person>();

	for(Person p : people) {
	    Person q = findFirstSmaller(p, result);
	    if(q != null) {
		result.remove();
		result.add(p);
		result.add(q);
	    } else {
		result.add(p);
	    }
	}
	
	people.reset();
	while(people.hasNext()) {
	    people.next();
	    people.remove();
	}
	
	for(Person p : result) {
	    people.add(p);
	}
    }


    public Person findBySSN(String ssn, SimpleList<Person> list) {
	if(ssn.length() == 0) return null;
	for(Person p : list) {
	    if(p.getSSN().startsWith(ssn)) return p;
	}
	return null;
    }

    public Person findByFirstName(String first, SimpleList<Person> list) {
	if(first.length() == 0) return null;
	for(Person p : list) {
	    if(p.getFirstName().startsWith(first)) return p;
	}
	return null;
    }

    public Person findByLastName(String last, Person[] data) {
	if(last.length() == 0) return null;
	for(Person p : data) {
	    if(p.getLastName().startsWith(last)) return p;
	}
	return null;
    }


    public Person findByAge(String age, Person[] data) {
	if(age.length() == 0) return null;
	for(Person p : data) {
	    if((p.getAge()+"").startsWith(age)) return p;
	}
	return null;
    }


    private Person findFirstSmaller(Person p, SimpleList<Person> list) {
	for(Person z : list) {
	    if(z.getSSN().compareTo(p.getSSN()) < 0) return z;
	}
	return null;
    }
    private Person findFirstBigger(Person p, SimpleList<Person> list) {
	for(Person z : list) {
	    if(z.getSSN().compareTo(p.getSSN()) > 0) return z;
	}
	return null;
    }
}
