#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;
}