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.util.*;
import java.io.*;
import java.util.regex.*;
import java.math.BigInteger;

public class Codeforces{

	static class MyScanner{
		BufferedReader br;
		StringTokenizer st;

		MyScanner(FileReader fileReader){
			br = new BufferedReader(fileReader);
		}

		MyScanner(){
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String nn(){
			while(st == null || !st.hasMoreElements()){
				try{
					st = new StringTokenizer(br.readLine());
				}catch(IOException e){
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		char nc(){
			return nn().charAt(0);
		}

		int ni(){
			return Integer.parseInt(nn());
		}

		long nl(){
			return Long.parseLong(nn());
		}

		double nd(){
			return Double.parseDouble(nn());
		}

		int[] niArr0(int n){
			int[] ar = new int[n];
			for(int i = 0; i < n; i++) ar[i] = ni();
			return ar;
		}

		int[] niArr1(int n){
			int[] ar = new int[n + 1];
			for(int i = 1; i <= n; i++) ar[i] = ni();
			return ar;
		}

		long[] nlArr0(int n){
			long[] ar = new long[n];
			for(int i = 0; i < n; i++) ar[i] = nl();
			return ar;
		}
	}

	public static <T> void mprintln(T ... ar){
		for(T i: ar) out.print(i + " ");
		out.println();
	}

	private static PrintWriter out;

	public static void main(String[] args) throws FileNotFoundException{

		// Input from file
		// File inputFile = new File("JavaFile.txt");
		// File outputFile = new File("JavaOutputFile.txt");
		// FileReader fileReader = new FileReader(inputFile);
		// Here it ends

		MyScanner sc = new MyScanner();
		// MyScanner sc = new MyScanner(fileReader);

		out = new PrintWriter(new BufferedOutputStream(System.out)); // Output to console
		// out = new PrintWriter(new PrintStream(outputFile)); // Output to file

		getAns(sc);

		out.close();
	}

	private static void getAns(MyScanner sc){
		int[] ar = sc.niArr0(4);
		Arrays.sort(ar);

		for(int i = 0; i < 3; i++) out.print(ar[3] - ar[i] + " ");
	}
}