class CollectionUtils {

	public static Optional<IntCollection> intersection(Collection<IntCollection> clusters) {
		//shrink result as early as possible
		List<IntCollection> sorted = sort(clusters, CLUSTER_COMPARATOR);
		return createIntersector(sorted).map(HeadAndTailIntersector::intersect);
	}

}