Problem: Fifa and Fafa are sharing a flat. Fifa loves video games and wants to download a new soccer game. Unfortunately, Fafa heavily uses the internet which consumes the quota. Fifa can access the internet through his Wi-Fi access point. This access point can be accessed within a range of r meters (this range can be chosen by Fifa) from its position. Fifa must put the access point inside the flat which has a circular shape of radius R. Fifa wants to minimize the area that is not covered by the access point inside the flat without letting Fafa or anyone outside the flat to get access to the internet.

The world is represented as an infinite 2D plane. The flat is centered at (x1, y1) and has radius R and Fafa's laptop is located at (x2, y2), not necessarily inside the flat. Find the position and the radius chosen by Fifa for his access point which minimizes the uncovered area.

Input

The single line of the input contains 5 space-separated integers R, x1, y1, x2, y2 (1 ≤ R ≤ 105, |x1|, |y1|, |x2|, |y2| ≤ 105).

Output

Print three space-separated numbers xap, yap, r where (xap, yap) is the position which Fifa chose for the access point and r is the radius of its range. 

Your answer will be considered correct if the radius does not differ from optimal more than 10 - 6 absolutely or relatively, and also the radius you printed can be changed by no more than 10 - 6 (absolutely or relatively) in such a way that all points outside the flat and Fafa's laptop position are outside circle of the access point range.

Examples

Input

5 3 3 1 1


Output

3.7677669529663684 3.7677669529663684 3.914213562373095


Input

10 5 5 5 15


Output

5.0 5.0 10.0

Solution (in JAVA):

Solution:
//package CFRound.ROUND465;
import java.util.*;
import java.io.*;
public class C {
        String INPUT = "5 3 3  1 1";
        long MOD = (long)1e9+7;
        void solve()
        {
                double R = d(), x1 = d(), y1 = d(), x2= d(), y2= d();
                Point p = new Point();
                Point p1 = new Point(x1,y1);
                Point p2 = new Point(x2,y2);
                double d1 = p.dist(p1,p2);
                if(p.cmp(d1,R)>=0){
                        out.printf("%.14f %.14f %.14f",p1.x,p1.y,R);
                }else if(d1<=p.eps){
                        out.printf("%.14f %.14f %.14f",p1.x+R/2,p1.y,R/2);
                }else{
                        double y = d1+R;
                        Point q = p.scale(y/2.0,p.unit(p.sub(p1,p2)));
                        q = p.add(p2,q);
                        out.println(q.x+" "+q.y+" "+p.dist(p2,q));
                }
        }
        public class Point {
                double x,y;
                double eps = 1e-19;
                Point(){};
                Point(double x,double y){
                        this.x = x; this.y = y;
                }
                public double X(Point p){ return p.x;}
                public double Y(Point p){ return p.y;}
                public Point add(Point a,Point b){
                        return new Point(a.x+b.x,a.y+b.y);
                }
                public Point sub(Point a,Point b){
                        return new Point(a.x-b.x,a.y-b.y);
                }
                public Point scale(double factor, Point a){
                        return new Point(a.x*factor,a.y*factor);
                }

                /////operation
                public double norm(Point a){return a.x*a.x+a.y*a.y;}
                public double abs(Point a){return Math.sqrt(norm(a));}
                public double dist(Point a,Point b){
                        return abs(sub(b,a));
                }
                public boolean same(double a,double b){
                        return a+eps>b&&b+eps>a;
                }
                public double dot(Point a,Point b){
                        return a.x*b.x+a.y*b.y;
                }
                public double cross(Point a,Point b){
                        return a.x*b.y-a.y*b.x;
                }
                public int cmp(double a,double b){
                        return (a+eps<b? -1 : (b+eps<a?1:0));
                }
                public double distSq(Point a,Point b){
                        return norm(sub(b,a));
                }
                public Point midPoint(Point a,Point b){
                        return scale(0.5,add(a,b));
                }
                public Point linePointAt(Point a,Point b,double x){
                        return add(a,scale(x,sub(b,a)));
                }
                public Point rotate90CCW(Point a){
                        return new Point(-a.y,a.x);
                }
                public Point rotate90CW(Point a){
                        return new Point(a.y,-a.x);
                }
                public Point unit(Point a){return scale(1.0/abs(a),a);}
                ////////////////
                public double triangleArea(Point a,Point b,Point c){
                        return Math.abs(cross(sub(b,a),sub(c,a)))/2.0;
                }
                public Point bisector(Point a,Point b){
                        if(cross(a,b)==0) return rotate90CW(b);
                        return midPoint(unit(a),unit(b));
                }
                public Point[] triangleBisector(Point a,Point b,Point c){
                        Point p1 = a;
                        Point p2 = add(a,midPoint(unit(sub(b,a)),unit(sub(c,a))));
                        return new Point[]{p1,p2};
                }

                public boolean pointInTriangle(Point a,Point b,Point c,Point p){
                        return cmp(Math.abs(cross(sub(b,a),sub(c,a))),
                                Math.abs(cross(sub(a,p),sub(b,p)))+
                                        Math.abs(cross(sub(b,p),sub(c,p)))+
                                        Math.abs(cross(sub(c,p),sub(a,p)))) == 0;
                }

                //////////////////////
        }

        void run() throws Exception{
                is = oj ? System.in: new ByteArrayInputStream(INPUT.getBytes());
                //is = System.in;
                out = new PrintWriter(System.out);
                long s = System.currentTimeMillis();
                solve();
                out.flush();
                tr(System.currentTimeMillis()-s+"ms");
        }
        public static void main(String[] args)throws Exception {
                new C().run();
        }
        InputStream is;
        PrintWriter out;
        private byte[] inbuf = new byte[1024];
        public int lenbuf = 0, ptrbuf = 0;

        private int readByte()
        {
                if(lenbuf == -1)throw new InputMismatchException();
                if(ptrbuf >= lenbuf){
                        ptrbuf = 0;
                        try { lenbuf = is.read(inbuf); } catch (IOException e) { throw new InputMismatchException(); }
                        if(lenbuf <= 0)return -1;
                }
                return inbuf[ptrbuf++];
        }

        private boolean isSpaceChar(int c) { return !(c >= 33 && c <= 126); }
        private int skip() { int b; while((b = readByte()) != -1 && isSpaceChar(b)); return b; }

        private double d() { return Double.parseDouble(s()); }
        private char c() { return (char)skip(); }

        private String s()
        {
                int b = skip();
                StringBuilder sb = new StringBuilder();
                while(!(isSpaceChar(b))){ // when nextLine, (isSpaceChar(b) && b != ' ')
                        sb.appendCodePoint(b);
                        b = readByte();
                }
                return sb.toString();
        }

        private char[] sa(int n)
        {
                char[] buf = new char[n];
                int b = skip(), p = 0;
                while(p < n && !(isSpaceChar(b))){
                        buf[p++] = (char)b;
                        b = readByte();
                }
                return n == p ? buf : Arrays.copyOf(buf, p);
        }

        private char[][] nm(int n, int m)
        {
                char[][] map = new char[n][];
                for(int i = 0;i < n;i++)map[i] = sa(m);
                return map;
        }

        private int[] ia(int n)
        {
                int[] a = new int[n];
                for(int i = 0;i < n;i++)a[i] = i();
                return a;
        }

        private int i()
        {
                int num = 0, b;
                boolean minus = false;
                while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
                if(b == '-'){
                        minus = true;
                        b = readByte();
                }

                while(true){
                        if(b >= '0' && b <= '9'){
                                num = num * 10 + (b - '0');
                        }else{
                                return minus ? -num : num;
                        }
                        b = readByte();
                }
        }

        private long l()
        {
                long num = 0;
                int b;
                boolean minus = false;
                while((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-'));
                if(b == '-'){
                        minus = true;
                        b = readByte();
                }

                while(true){
                        if(b >= '0' && b <= '9'){
                                num = num * 10 + (b - '0');
                        }else{
                                return minus ? -num : num;
                        }
                        b = readByte();
                }
        }

        private boolean oj = System.getProperty("ONLINE_JUDGE") != null;
        private void tr(Object... o) { if(!oj)System.out.println(Arrays.deepToString(o)); }

}