public static void main(String[] args) {
		T t = new T();
		for (int i = 0; i < factors.length; i++) {
			System.out.print(factors[i]+"^"+pows[i]+" * ");
		}
		System.out.println();
		
		rec(BigInteger.ONE, 0);
		BigInteger goal = BigInteger.ONE;
		for (int i = 2; i <= factorial; i++) {
			goal = goal.multiply(BigInteger.valueOf(i));
		}
		BigInteger[] numbers = new BigInteger[candidates.size()];
		int asd = 0;
		for (BigInteger candidate : candidates) {
			numbers[asd++] = candidate;
		}
		
		BigDecimal minste = BigDecimal.TEN.pow(100);
		BigDecimal f = null;
		for (int i = 0; i < numbers.length; i++) {
			if (i % 100 == 0)
				System.out.println(i + " " + numbers.length);
			for (int j = i; j < numbers.length; j++) {
				BigInteger num = numbers[i].multiply(numbers[j]);
				if (goal.mod(num).equals(BigInteger.ZERO) && candidates.contains(goal.divide(num))) {
					BigInteger[] tall = {goal.divide(num), numbers[i], numbers[j]};
					Arrays.sort(tall);
					
					BigDecimal a = new BigDecimal(tall[0]);
					BigDecimal b = new BigDecimal(tall[1]);
					BigDecimal c = new BigDecimal(tall[2]);
					
					if (c.divide(a, 100, RoundingMode.HALF_DOWN).compareTo(minste) == -1) {
						minste = c.divide(a, 100, RoundingMode.HALF_DOWN);
						System.out.println(a);
						System.out.println(b);
						System.out.println(c);
						System.out.println(minste);
						f = a.add(b).add(c);
						System.out.println(a.add(b).add(c));
					}
				}
			}
		}
		System.out.println(f + " " + t);
	}