#include <algorithm>
#include <cassert>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <memory>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
/* #include <regex> */

using namespace std;

/* g++ -g -std=c++11 */

/* freopen("input.txt", "rt", stdin); */
/* freopen("output.txt", "wt", stdout); */

#define ALL(c)          (c).begin(), (c).end()
#define ALLR(c)         (c).rbegin(), (c).rend()
#define FOR(i,a,b)      for (int i=(a); i < (b); ++i)
#define FORR(i,a,b)     for (int i=(a); i > (b); --i)
#define FOR_ALL(i,c)    for (__typeof((c).begin()) i=(c).begin();   \
                             i != (c).end(); ++i)
#define FOR_ALLR(i,c)   for (__typeof((c).rbegin()) i=(c).rbegin(); \
                             i != (c).rend(); ++i)
#define SZ(array)       (sizeof(array)/sizeof(array[0]))
#define lc(x)           (x<<1)     /* 2*x */
#define rc(x)           (x<<1 | 1) /* 2*x+1 */
#define lowbit(x)       (x & (-x)) /* 0b10100 -> 0b100 */

typedef long long       LL;
typedef map<int,int>    MII;
typedef pair<int,int>   PII;
typedef set<int>        SI;
typedef vector<bool>    VB;
typedef vector<double>  VD;
typedef vector<int>     VI;
typedef vector<string>  VS;

/* check if a key is in container C */
template <class C>
inline bool in_(const typename C::key_type& k, const C& A)
{ return A.find(k) != A.end(); }
inline bool in_(const string& s, const string& S)
{ return S.find(s) != string::npos; }

const int maxn = 205;

int main()
{
/* #ifndef ONLINE_JUDGE */
/*     freopen("foo", "rt", stdin); */
/* #endif */
    int x1,y1,x2,y2;
    while (~scanf("%d%d%d%d",&x1,&y1,&x2,&y2)) {
        int x3,y3,x4,y4;
        const int dx = x1-x2;
        const int dy = y1-y2;
        const int d = dx*dx + dy*dy;
        const int Y1 = min(y1,y2) - maxn;
        const int Y2 = max(y1,y2) + maxn;
        const int X1 = min(x1,x2) - maxn;
        const int X2 = max(x1,x2) + maxn;
        int x,y;
        if (x1 == x2 && y1 < y2)
            x = x1-1, y = y1;
        else if (x1 == x2 && y1 > y2)
            x = x1+1, y = y1;
        else if (x1 > x2)
            x = x1, y = y1-1;
        else
            x = x1, y = y1+1;
        const int side =(x-x1)*(y2-y1)-(y-y1)*(x2-x1);
        FOR(x3,X1,X2) FOR(y3,Y1,Y2) {
            const int s1 =(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1);
            if (s1 == 0)
                continue;
            if (side/abs(side) != s1/abs(s1))
                continue;
            if ((y2-y1)*(y3-y2) != -(x2-x1)*(x3-x2))
                continue;
            if ((x3-x2)*(x3-x2) + (y3-y2)*(y3-y2) != d)
                continue;
            FOR(x4,X1,X2) FOR(y4,Y1,Y2) {
                const int s2 =(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1);
                if (s2 == 0)
                    continue;
                if (side/abs(side) != s2/abs(s2))
                    continue;
                if ((x3-x4)*(x3-x4) + (y3-y4)*(y3-y4) != d)
                    continue;
                if ((x4-x1)*(x4-x1) + (y4-y1)*(y4-y1) != d)
                    continue;
                printf("%d %d %d %d\n",x3,y3,x4,y4);
                goto done;
            }
        }
        assert(false);
    done:
        ;
    }
    return 0;
}


Measured memory_bytes: 256