#include //全てのヘッダファイルをインクルード //ループ #define REP(i, n) for(int i = 0; i < n; i++) //普通のループ #define REPR(i, n) for(int i = n; i >= 0; i--) //逆ループ #define FOR(i, m, n) for(int i = m; i < n; i++) //最初の数値を指定したループ //型名省略 typedef long long ll; //配列要素数 static const int MAX = 200000; using namespace std; //#include "./lib/generic/sort.h" std::tuple swap(int num1, int num2){ return std::forward_as_tuple(num1, num2); } void traceArray(int A[], int N){ for(int i=0; i> N; int A[N]; REP(i, N) cin >> A[i];*/ //sort::Sort test; //test.sortByIntention(A, N); //test.sortByBubble(A, N); //test.sortBySelection(A, N); //traceArray(A, N); /*int N=200, pointer=0; int A[N]; char tmp; while(1){ cin >> tmp; //pointer == push(A, pointer, tmp); if(cin.eof()){ cout << "bbb" << endl; break; } }*/ /*ll n; cin >> n; ll a=2, v1=1; while(n>=a*a){ if(n%(a*a)==0){ n/=a*a; v1*=a; }else{ a++; } } cout << v1 << " " << n;*/ ll a, b, c, d; cin >> a >> b >> c >> d; double D, x1, x2, y1, y2, p, q; D = pow(a-c,2.0)-8*(b-d); if(D==0){ cout << "Yes"; }else if(D<0){ cout << "No"; }else{ x1 = (-(a-c)+sqrt(D))/4; x2 = (-(a-c)-sqrt(D))/4; y1 = x1*x1+a*x1+b; y2 = x2*x2+a*x2+b; p = (y2-y1)/(x2-x1); q = y1-p*x1; cout << std::fixed << std::setprecision(10) << p << " " << q; } return 0; }