Find the tangent lines between a point $p$ and a circle $c$.

Constraints

* $-1,000 \leq px, py, cx, cy \leq 1,000$
* $1 \leq r \leq 1,000$
* Distance between $p$ and the center of $c$ is greater than the radius of $c$.

Input

The input is given in the following format.

$px \; py$
$cx \; cy \; r$

$px$ and $py$ represents the coordinate of the point $p$. $cx$, $cy$ and $r$ represents the center coordinate and radius of the circle $c$ respectively. All input values are given in integers.

Output

Print coordinates of the tangent points on the circle $c$ based on the following rules.

* Print the coordinate with smaller $x$ first. In case of a tie, print the coordinate with smaller $y$ first.



The output values should be in a decimal fraction with an error less than 0.00001.

Examples

Input

0 0
2 2 2


Output

0.0000000000 2.0000000000
2.0000000000 0.0000000000


Input

-3 0
2 2 2


Output

0.6206896552 3.4482758621
2.0000000000 0.0000000000
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#include<climits>
#include<cstring>
#include<queue>
#include<complex>
using namespace std;

typedef complex<double> P;

struct L : public vector<P>{
    L(const P &a, const P &b){
        push_back(a), push_back(b);
    }
};

struct C {
    P p; double r;
    C(const P &p, double r) : p(p), r(r) { }
};

const double EPS = 1e-8;

namespace std {
  bool operator < (const P& a, const P& b) {
    return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b);
  }
}

double cross(const P &a, const P &b){
    return imag(conj(a)*b);
}

double dot(const P &a, const P &b){
    return real(conj(a)*b);
}

int ccw(P a, P b, P c){
    b -= a;
    c -= a;
    if(cross(b,c) > 0) return +1;
    if(cross(b,c) < 0) return -1;
    if(dot(b,c) < 0) return +2;
    if(norm(b) < norm(c)) return -2;
    return 0;
}

P crosspoint(const L &l, const L &m) {
    double A = cross(l[1] - l[0], m[1] - m[0]);
    double B = cross(l[1] - l[0], l[1] - m[0]);
    if (abs(A) < EPS && abs(B) < EPS) return m[0]; // same line
    return m[0] + B / A * (m[1] - m[0]);
}

void tangentToCircle(double px, double py, double cx, double cy, double r){
    double x = px - cx;
    double y = py - cy;
    P contact1(r*(r*x + y*sqrt(x*x + y*y - r*r))/(x*x + y*y), r*(r*y - x*sqrt(x*x + y*y - r*r))/(x*x + y*y));
    P contact2(r*(r*x - y*sqrt(x*x + y*y - r*r))/(x*x + y*y), r*(r*y + x*sqrt(x*x + y*y - r*r))/(x*x + y*y));
    if (contact1 == contact2){
        cout << contact1.real() << " " << contact1.imag() << endl;
    }else{
        if(contact2 < contact1){
            swap(contact1, contact2);
        }
        printf("%.10f %.10f\n", contact1.real() + cx, contact1.imag() + cy);
        printf("%.10f %.10f\n", contact2.real() + cx, contact2.imag() + cy);
    }
}

int main(){
    double px, py, cx, cy, r;
    cin >> px >> py >> cx >> cy >> r;

    tangentToCircle(px, py, cx, cy, r);
    return 0;
}