Problem: Polycarp has guessed three positive integers a, b and c. He keeps these numbers in secret, but he writes down four numbers on a board in arbitrary order — their pairwise sums (three numbers) and sum of all three numbers (one number). So, there are four numbers on a board in random order: a+b, a+c, b+c and a+b+c.

You have to guess three numbers a, b and c using given numbers. Print three guessed integers in any order.

Pay attention that some given numbers a, b and c can be equal (it is also possible that a=b=c).

Input

The only line of the input contains four positive integers x_1, x_2, x_3, x_4 (2 ≤ x_i ≤ 10^9) — numbers written on a board in random order. It is guaranteed that the answer exists for the given number x_1, x_2, x_3, x_4.

Output

Print such positive integers a, b and c that four numbers written on a board are values a+b, a+c, b+c and a+b+c written in some order. Print a, b and c in any order. If there are several answers, you can print any. It is guaranteed that the answer exists.

Examples

Input


3 6 5 4


Output


2 1 3


Input


40 40 40 60


Output


20 20 20


Input


201 101 101 200


Output


1 100 100

Solution (in JAVA):

Solution:

import java.io.*;
import java.util.*;

public class Main {

    private static InputReader in;
    private static OutputWriter out;

    public static void main(String[] args) {
        in = new InputReader(System.in);
        out = new OutputWriter(System.out);

        int testcase = 1;

        while (testcase-- > 0) {
            solve();
        }

        out.flush();

        in.close();
        out.close();
    }

    private static void solve() {
        int []x = new int[4];
        for (int i = 0;i < 4;i++){
            x[i] = in.nextInt();
        }

        Arrays.sort(x);

        int a = x[0] + x[1] - x[3];
        int b = x[0] - a;
        int c = x[1] - a;

        out.println(a + " " + b + " " + c);
    }

    private static void printList(List<Integer> list, boolean isReverseOrder) {
        if(isReverseOrder){
            for (int i = list.size() - 1; i >= 0; i--) {
                out.print(list.get(i) + " ");
            }
        }else {
            for (int i = 0; i < list.size(); i++) {
                out.print(list.get(i) + " ");
            }
        }
        out.println();
    }

    private static String stringSort(String s) {
        char[] chars = s.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }

    private static int getCharFrequency(String a, char c) {
        int count = 0;
        for (int i = 0; i < a.length() - 1; i++) {
            if(a.charAt(i) == c){
                count++;
            }
        }

        return count;
    }

    static class InputReader {
        private InputStream stream;
        private byte[] buf = new byte[1024];
        private int curChar;
        private int numChars;

        public InputReader(InputStream stream) {
            this.stream = stream;
        }

        public int read() {
            if (numChars == -1)
                throw new InputMismatchException();

            if (curChar >= numChars) {
                curChar = 0;
                try {
                    numChars = stream.read(buf);
                } catch (IOException e) {
                    throw new InputMismatchException();
                }
                if (numChars <= 0)
                    return -1;
            }

            return buf[curChar++];
        }

        public int nextInt() {
            int c = read();

            while (isSpaceChar(c))
                c = read();

            int sgn = 1;

            if (c == '-') {
                sgn = -1;
                c = read();
            }

            int res = 0;

            res = (int) getResult(c, res);

            return res * sgn;
        }

        public int[] nextIntArray(int arraySize) {
            int array[] = new int[arraySize];

            for (int i = 0; i < arraySize; i++)
                array[i] = nextInt();

            return array;
        }

        public long nextLong() {
            int c = read();

            while (isSpaceChar(c))
                c = read();

            int sign = 1;

            if (c == '-') {
                sign = -1;

                c = read();
            }

            long result = 0;

            result = getResult(c, result);

            return result * sign;
        }

        private long getResult(int c, long result) {
            do {
                if (c < '0' || c > '9')
                    throw new InputMismatchException();

                result *= 10;
                result += c & 15;

                c = read();
            } while (!isSpaceChar(c));
            return result;
        }

        public long[] nextLongArray(int arraySize) {
            long array[] = new long[arraySize];

            for (int i = 0; i < arraySize; i++)
                array[i] = nextLong();

            return array;
        }

        public float nextFloat() // problematic
        {
            float result, div;
            byte c;

            result = 0;
            div = 1;
            c = (byte) read();

            while (c <= ' ')
                c = (byte) read();

            boolean isNegative = (c == '-');

            if (isNegative)
                c = (byte) read();

            do {
                result = result * 10 + c - '0';
            } while ((c = (byte) read()) >= '0' && c <= '9');

            if (c == '.')
                while ((c = (byte) read()) >= '0' && c <= '9')
                    result += (c - '0') / (div *= 10);

            if (isNegative)
                return -result;

            return result;
        }

        public double nextDouble() // not completely accurate
        {
            double ret = 0, div = 1;
            byte c = (byte) read();

            while (c <= ' ')
                c = (byte) read();

            boolean neg = (c == '-');

            if (neg)
                c = (byte) read();

            do {
                ret = ret * 10 + c - '0';
            } while ((c = (byte) read()) >= '0' && c <= '9');

            if (c == '.')
                while ((c = (byte) read()) >= '0' && c <= '9')
                    ret += (c - '0') / (div *= 10);

            if (neg)
                return -ret;

            return ret;
        }

        public String next() {
            int c = read();

            while (isSpaceChar(c))
                c = read();

            StringBuilder res = new StringBuilder();

            do {
                res.appendCodePoint(c);

                c = read();
            } while (!isSpaceChar(c));

            return res.toString();
        }

        public boolean isSpaceChar(int c) {
            return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
        }

        public String nextLine() {
            int c = read();

            StringBuilder result = new StringBuilder();

            do {
                result.appendCodePoint(c);

                c = read();
            } while (!isNewLine(c));

            return result.toString();
        }

        public boolean isNewLine(int c) {
            return c == '\n';
        }

        public void close() {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    static class OutputWriter {
        private PrintWriter writer;

        public OutputWriter(OutputStream stream) {
            writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                    stream)));
        }

        public OutputWriter(Writer writer) {
            this.writer = new PrintWriter(writer);
        }

        public void println(int x) {
            writer.println(x);
        }

        public void print(int x) {
            writer.print(x);
        }

        public void println(int array[], int size) {
            for (int i = 0; i < size; i++)
                println(array[i]);
        }

        public void print(int array[], int size) {
            for (int i = 0; i < size; i++)
                print(array[i] + " ");
        }

        public void println(long x) {
            writer.println(x);
        }

        public void print(long x) {
            writer.print(x);
        }

        public void println(long array[], int size) {
            for (int i = 0; i < size; i++)
                println(array[i]);
        }

        public void print(long array[], int size) {
            for (int i = 0; i < size; i++)
                print(array[i]);
        }

        public void println(float num) {
            writer.println(num);
        }

        public void print(float num) {
            writer.print(num);
        }

        public void println(double num) {
            writer.println(num);
        }

        public void print(double num) {
            writer.print(num);
        }

        public void println(String s) {
            writer.println(s);
        }

        public void print(String s) {
            writer.print(s);
        }

        public void println() {
            writer.println();
        }

        public void printSpace() {
            writer.print(" ");
        }

        public void flush() {
            writer.flush();
        }

        public void close() {
            writer.close();
        }

    }

}