#include <bits/stdc++.h>
using namespace std;

struct point{
    double x,y;
    point(double A,double B){
        x=A,y=B;
    }
    point() = default;
};

struct line{
    point point_A,point_B;
    line(point A,point B){
        point_A = A,point_B = B;
    }
    line() = default;
};

struct Circle{
    point O;
    int r;
    Circle(point A,int B){
        O=A,r=B;
    }
    Circle() = default;
};

double getD_dx(const point& po,const line& l){
	double xp=po.x,yp=po.y;
	double xa=l.point_A.x,ya=l.point_A.y;
	double xb=l.point_B.x,yb=l.point_B.y;
	double A=yb-ya;
	double B=xa-xb;
	double C=xb*ya-xa*yb;
	double d=fabs(A*xp+B*yp+C)/sqrt(A*A+B*B);
	
	return d;
}

double getDistance(const Circle& circle, const line& l) {
    // 请在这里实现你的代码
    double d=getD_dx(circle.O,l);
    double res=sqrt(circle.r*circle.r-d*d);//勾股定理
    
    return 2*res;
}

int main(){
	double xc,yc,r,xa,ya,xb,yb;
	cin>>xc>>yc>>r;
	cin>>xa>>ya>>xb>>yb;
	point poc=point(xc,yc),poa=point(xa,ya),pob=point(xb,yb);
	line li=line(poa,pob);
	Circle c=Circle(poc,r);
	cout<<getDistance(c,li)<<endl;
	
	
	return 0;
}