private static List<List<Integer>> Bucketize(List<Integer> candidates, List<Long> primes, int primeSet) {
        ArrayList<List<Integer>> result = new ArrayList<List<Integer>>();

        for (int i = 0; i < candidates.size(); i++) {
            Integer n1 = candidates.get(i);

            System.out.print("Candidate=" + n1);

            ArrayList<Integer> bucket = new ArrayList<Integer>();
            for (int j = i + 1; j < candidates.size(); j++) {
                Integer n2 = candidates.get(j);

                if (IsConcatenablePrime(n1, n2, primes)) {
                    bucket.add(n2);
                }
            }

            System.out.println(", Bucket size=" + bucket.size());
            if (primeSet <= bucket.size()) {
                List<List<Integer>> partialResult = Bucketize(bucket, primes, primeSet - 1);
                for (Iterator<List<Integer>> it = partialResult.iterator(); it.hasNext();) {
                    List<Integer> list = it.next();
                    list.add(0, n1);

                    result.add(list);
                }
            }
        }

        if (result.isEmpty()) {
            result.add(new ArrayList<Integer>());
        }
        return result;
    }