private static void reccurse(List<Integer> U, int last, int n, int limit) {
		if (n == limit) {
			return;
		}
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		for (int i = 0; i < U.size(); i++) {
			int u1 = U.get(i);
			for (int j = i+1; j < U.size(); j++) {
				int u2 = U.get(j);
				if (u1 + u2 <= last)
					continue;
				int un = u1 + u2;
				map.put(un, (map.containsKey(un) ? map.get(un)+1 : 1));
			}
		}
		
		int newLast = Integer.MAX_VALUE;
		for (Map.Entry<Integer, Integer> u: map.entrySet()) {
			if (u.getValue() == 1) {
				newLast = Math.min(newLast, u.getKey());
			}
		}
		U.add(newLast);
		reccurse(U, newLast, n+1, limit);
	}