public Set<Cluster> cluster(Set<Contact> contacts){
		
		Distance<Contact> bm_distance = getDistance();
		
        HierarchicalClusterer<Contact> clusterer 
        = new CompleteLinkClusterer<Contact>(10,bm_distance);
		
        Set<Contact> rem = new HashSet<Contact>();
        for(Contact c : contacts){
        	if(c.get("Birthday")==null) rem.add(c);
        }
        contacts.removeAll(rem);
        
        Set<Set<Contact>> raw_clusters = clusterer.cluster(contacts);
        
        Set<Cluster> clusters = new HashSet<Cluster>();
        
        for(Set<Contact> set : raw_clusters){
        	
        	int total = 0;
        	for(Contact c : set){
        		total += day_of_year(c.get("Birthday"));
        	}
        	total /= set.size();
        	
        	String label = "average of "+reverse_day_of_year(total);
        	
        	clusters.add(new Cluster(set,label));
        }
        
        return clusters;
	}