import java.util.*;

public class Euler103 {
    static boolean isSpecial(int[] s) {
        Arrays.sort(s);
        int n = s.length;
        for (int k = 1; k < n; k++) {
            int lo = 0, hi = 0;
            for (int i = 0; i <= k; i++)
                lo += s[i];
            for (int i = n - k; i < n; i++)
                hi += s[i];
            if (lo <= hi)
                return false;
        }
        Map<Integer, Integer> sums = new HashMap<>();
        for (int mask = 1; mask < (1 << n); mask++) {
            int sum = 0;
            for (int i = 0; i < n; i++)
                if ((mask & (1 << i)) != 0)
                    sum += s[i];
            for (Map.Entry<Integer, Integer> e : sums.entrySet())
                if ((e.getKey() & mask) == 0 && e.getValue() == sum)
                    return false;
            sums.put(mask, sum);
        }
        return true;
    }

    static int[] best;
    static int bestSum;

    static void search(int idx, int[] current, int minVal, int curSum) {
        if (idx == 7) {
            if (curSum < bestSum && isSpecial(current.clone())) {
                best = current.clone();
                bestSum = curSum;
            }
            return;
        }
        for (int v = minVal; v < minVal + 30; v++) {
            if (curSum + v > bestSum)
                break;
            current[idx] = v;
            search(idx + 1, current, v + 1, curSum + v);
        }
    }

    public static void main(String[] args) {
        best = new int[] { 20, 31, 38, 39, 40, 42, 45 };
        bestSum = Arrays.stream(best).sum();
        search(0, new int[7], 1, 0);
        StringBuilder sb = new StringBuilder();
        for (int v : best)
            sb.append(v);
        System.out.println(sb);
    }
}
