#include <bits/stdc++.h>
using namespace std;

#define all(cont) cont.begin(), cont.end()
#define rall(cont) cont.end(), cont.begin()
#define mp make_pair
#define pb push_back
#define fs first
#define sc second
#define fr(i, a, b) for(int i = a ; i < b ; i++)
#define fre(i, a, b) for(int i = a ; i <= b ; i++) //ini baru
#define frr(i, a, b) for(int i = a ; i >= b ; i--)
//#define fri(i, a, b) for (auto i = a; i != b; ++i)
#define tr(it, var) for(__typeof(var.begin()) it = var.begin(); it != var.end(); it++)
#define trr(rit, var) for(__typeof(var.rbegin()) rit = var.rbegin(); rit != var.rend(); rit++)
#define its(x) static_cast< ostringstream & >( ( ostringstream() << dec << x ) ).str() // int to string
#define fill1(a, c, x) fr(_I, 0, (c)) (a)[_I] = (x)
#define fill2(a, r, c, x) fr(_I, 0, (r)) fr(_J, 0, (c)) (a)[_I][_J] = (x)
#define boost ios_base::sync_with_stdio(false)
#define sz(x) ((int)(x).size())
#define deb(x) cout << #x" = " << x << '\n';
#define dist(x1, y1, x2, y2) sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
#define com(x, a, b) x/a + x/b - x/(a*b)
#define MEMSET(a, b) memset(a, (b), sizeof(a)) //ini baru

int binarySearch(int arr[], int l, int r, int x) // int result = binarySearch(arr, 0, n-1, x); // return index
{	//NOTE : DATA HARUS UNIK!!!
   if (r >= l)
   {
        int mid = l + (r - l)/2;
 
        // If the element is present at the middle 
        // itself
        if (arr[mid] == x)  
            return mid;
 
        // If element is smaller than mid, then 
        // it can only be present in left subarray
        if (arr[mid] > x) 
            return binarySearch(arr, l, mid-1, x);
 
        // Else the element can only be present
        // in right subarray
        return binarySearch(arr, mid+1, r, x);
   }
 
   // We reach here when element is not 
   // present in array
   return -1;
}


	/* GEOMETRY */
int square(int n) //pow(n,2) --- O(log n)
{
    // Base case
    if (n==0) return 0;
 
    // Handle negative number
    if (n < 0) n = -n;
 
    // Get floor(n/2) using right shift
    int x = n>>1;
 
    // If n is odd
    if (n&1)
        return ((square(x)<<2) + (x<<2) + 1);
    else // If n is even
        return (square(x)<<2);
}

int floorSqrt1(int x) // O(sqrt(n))
{
    // Base cases
    if (x == 0 || x == 1)
    return x;
 
    // Staring from 1, try all numbers until
    // i*i is greater than or equal to x.
    int i = 1, result = 1;
    while (result <= x)
    {
      i++;
      result = i * i;
    }
    return i - 1;
}

int floorSqrt(int x) // O(log n)
{    
    // Base cases
    if (x == 0 || x == 1) 
       return x;
 
    // Do Binary Search for floor(sqrt(x))
    int start = 1, end = x, ans;   
    while (start <= end) 
    {        
        int mid = (start + end) / 2;
 
        // If x is a perfect square
        if (mid*mid == x)
            return mid;
 
        // Since we need floor, we update answer when mid*mid is 
        // smaller than x, and move closer to sqrt(x)
        if (mid*mid < x) 
        {
            start = mid + 1;
            ans = mid;
        } 
        else // If mid*mid is greater than x
            end = mid - 1;        
    }
    return ans;
}
float power(float x, int y) // O(log n)
{
    float temp;
    if( y == 0)
       return 1;
    temp = power(x, y/2);       
    if (y%2 == 0)
        return temp*temp;
    else
    {
        if(y > 0)
            return x*temp*temp;
        else
            return (temp*temp)/x;
    }
}  

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef vector<int> vi;

int kpk(int a, int b)
{
	int kpk = 0;
	fre(i, 1, b){
		kpk+=a;
		if(kpk%b == 0){
			break;
		}
	}
	return kpk;
}

int main() {
//    freopen("input2.in", "r", stdin);
	int x1,x2,x3,x4,y1,y2,y3,y4;
	scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
	int jrk;
	int a, b;
	bool miring = false;
	if(x1 != x2 && y1 != y2){
		miring = true;
   	    if(x1 < x2 && y1 < y2){
			a = abs(x2 - x1);
			b = abs(y2 - y1);
			x1 = x1 - b;
			y1 = y1;
			x2 = x2;
			y2 = y2 - b;
		} else if(x1 > x2 && y1 < y2){
			a = abs(y2 - y1);
			b = abs(x2 - x1);
			x1 = x1;
			y1 = y1 - b;
			x2 = x2 + b;
			y2 = y2;
		} else if(x1 > x2 && y1 > y2){
			a = abs(x1 - x2);
			b = abs(y1 - y2);
			x1 = x1 + b;
			y1 = y1;
			x2 = x2;
			y2 = y2 + b;
		} else if(x1 < x2 && y1 > y2){
			a = abs(x2 - x1);
			b = abs(y1 - y2);
			x1 = x1;
			y1 = y1 + b;
			x2 = x2 - b;
			y2 = y2;
		}
	}
	
//	cout << x1 << " " << y1 << " " << x2 << " " << y2 << " " << endl;

	if(miring){
		if(x1 == x2){
			jrk = abs(y1-y2);
			if(y1 > y2){
						//  |_
				x3 = x2 + jrk;
				y3 = y2;
				x4 = x3;
				y4 = y3 + jrk;

				y3 = y3 + b;
				x4 = x4 - b;
			} else { //   _
					 //	  |
				x3 = x2 - jrk;
				y3 = y2;
				x4 = x3;
				y4 = y3 - jrk;	

				y3 = y3 - b;
				x4 = x4 + b;
			}
		} else if(y1 == y2){
			jrk = abs(x1-x2);
			if(x1 < x2){ 
						//  _|
				x3 = x2;
				y3 = y2 + jrk;
				x4 = x3 - jrk;
				y4 = y3;

				x3 = x3 - b;
				y4 = y4 - b;
			} else { //   _
					 //	 |
				x3 = x2;
				y3 = y2 - jrk;
				x4 = x3 + jrk;
				y4 = y3;	

				x3 = x3 + b;
				y4 = y4 + b;
			}
		}
	} else {
		if(x1 == x2){
			jrk = abs(y1-y2);
			if(y1 > y2){
						//  |_
				x3 = x2 + jrk;
				y3 = y2;
				x4 = x3;
				y4 = y3 + jrk;	
			} else { //   _
					 //	  |
				x3 = x2 - jrk;
				y3 = y2;
				x4 = x3;
				y4 = y3 - jrk;	
			}
		} else if(y1 == y2){
			jrk = abs(x1-x2);
			if(x1 < x2){ 
						//  _|
				x3 = x2;
				y3 = y2 + jrk;
				x4 = x3 - jrk;
				y4 = y3;
			} else { //   _
					 //	 |
				x3 = x2;
				y3 = y2 - jrk;
				x4 = x3 + jrk;
				y4 = y3;	
			}
		}
	}
	
	cout << x3 << " " << y3 << " " << x4 << " " << y4 << " " << endl;
	
	return 0;
}





















Measured memory_bytes: 256