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 <bits/stdc++.h>
using namespace std;

struct Point {
    double x, y;

    Point() = default;
    Point(double x, double y) : x(x), y(y) {}

    Point operator+(const Point &rhs) const {
        return Point(x + rhs.x, y + rhs.y);
    }

    Point operator-(const Point &rhs) const {
        return Point(x - rhs.x, y - rhs.y);
    }

    double operator*(const Point &rhs) const {
        return x * rhs.x + y * rhs.y;
    }

    double operator%(const Point &rhs) const {
        return x * rhs.y - y * rhs.x;
    }

    bool operator<(const Point &rhs) const {
        return fabs(x - rhs.x) < 1e-9 ? y < rhs.y : x < rhs.x;
    }

    Point operator/(double d) const {
        return Point(x / d, y / d);
    }
    
    Point operator*(double d) const {
        return Point(x * d, y * d);
    }
};

array<Point, 2> tangent(Point o, double r, Point p) {
    double dist = sqrt((p - o) * (p - o));
    double len = sqrt(dist * dist - r * r);
    double ang = acos(len / dist);
    Point vec = (o - p) / dist * len;
    array<Point, 2> res;
    for (int i = 0; i < 2; ++i) {
        int z = i == 0 ? 1 : -1;
        Point v(vec.x * cos(z * ang) - vec.y * sin(z * ang), vec.x * sin(z * ang) + vec.y * cos(z * ang));
        res[i] = p + v; 
    }
    return res;
}

int main() {
    Point p, o;
    cin >> p.x >> p.y;
    cin >> o.x >> o.y;
    double r; cin >> r;
    array<Point, 2> ans = tangent(o, r, p);
    if (ans[1] < ans[0]) swap(ans[0], ans[1]);
    cout << fixed << setprecision(20) << ans[0].x << ' ' << ans[0].y << endl;
    cout << fixed << setprecision(20) << ans[1].x << ' ' << ans[1].y << endl;
    return 0;
}

