#include using namespace std; templateistream &operator>>(istream&,pair&); templateistream &operator>>(istream&,tuple&a); templateistream &operator>>(istream&is,vector&a); templateistream &operator>>(istream&is,array&a); template istream &operator>>(istream&is,pair&a){ is>>a.first>>a.second; return is; } template void read_tuple(istream&is,tuple&a){ if constexpr(pos>::value){ is>>get(a); read_tuple(is,a); } } template istream &operator>>(istream&is,tuple&a){ read_tuple<0>(is,a); return is; } template istream &operator>>(istream&is,vector&a){ for(T&x:a)is>>x; return is; } template istream &operator>>(istream&is,array&a){ for(T&x:a)is>>x; return is; } templateostream &operator<<(ostream&os,const pair&); templateostream &operator<<(ostream&os,const tuple&); templateostream &operator<<(ostream&os,const vector&); templateostream &operator<<(ostream&os,priority_queue); templateostream &operator<<(ostream&os,queue); templateostream &operator<<(ostream&os,deque); templateostream &operator<<(ostream&os,stack); templateostream &operator<<(ostream&os,const array&); templateostream &operator<<(ostream&os,const map&); templateostream &operator<<(ostream&os,const unordered_map&); templateostream &operator<<(ostream&os,const set&); templateostream &operator<<(ostream&os,const multiset&); templateostream &operator<<(ostream&os,const unordered_set&); template ostream &operator<<(ostream&os,const pair&a){ os< void write_tuple(ostream&os,const tuple&a){ if constexpr(pos>::value){ if constexpr(pos>0)os<<' '; os<(a); write_tuple(os,a); } } template ostream &operator<<(ostream&os,const tuple&a){ write_tuple<0>(os,a); return os; } template ostream &operator<<(ostream&os,const vector&a){ os<<'{'; for(int i=0;i<(int)a.size();i++){ os< ostream &operator<<(ostream&os,priority_queuea){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,queuea){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,dequea){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,stacka){ os<<'{'; if(!a.empty()){ os< ostream &operator<<(ostream&os,const array&a){ os<<'{'; for(int i=0;i<(int)a.size();i++){ os< ostream &operator<<(ostream&os,const map&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<"{["<first<<","<second<<']'; while(++itr!=a.end())os<<",["<first<<','<second<<']'; os<<'}'; return os; } template ostream &operator<<(ostream&os,const unordered_map&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<"{["<first<<","<second<<']'; while(++itr!=a.end())os<<",["<first<<','<second<<']'; os<<'}'; return os; } template ostream &operator<<(ostream&os,const set&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<'{'<<*itr; while(++itr!=a.end())os<<','<<*itr; os<<'}'; return os; } template ostream &operator<<(ostream&os,const multiset&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<'{'<<*itr; while(++itr!=a.end())os<<','<<*itr; os<<'}'; return os; } template ostream &operator<<(ostream&os,const unordered_set&a){ if(a.empty()){ os<<"{}"; return os; } auto itr=a.begin(); os<<'{'<<*itr; while(++itr!=a.end())os<<','<<*itr; os<<'}'; return os; } using namespace std; using ll=long long; using ull=unsigned long long; using P=pair; templateusing minque=priority_queue,greater>; templatebool chmax(T &a,const T &b){return (abool chmin(T &a,const T &b){return (a>b?(a=b,true):false);} templatevoid operator++(pair&a,int){a.first++,a.second++;} templatevoid operator--(pair&a,int){a.first--,a.second--;} templatevoid operator++(vector&a,int){for(auto &i:a)i++;} templatevoid operator--(vector&a,int){for(auto &i:a)i--;} #define overload3(_1,_2,_3,name,...) name #define rep1(i,n) for(int i=0;i<(int)(n);i++) #define rep2(i,l,r) for(int i=(int)(l);i<(int)(r);i++) #define rep(...) overload3(__VA_ARGS__,rep2,rep1)(__VA_ARGS__) #define reps(i,l,r) rep2(i,l,r) #define all(x) x.begin(),x.end() #define pcnt(x) __builtin_popcountll(x) #define fin(x) return cout<<(x)<<'\n',static_cast(0) #define yn(x) cout<<((x)?"Yes\n":"No\n") #define uniq(x) sort(all(x)),x.erase(unique(all(x)),x.end()) template inline int fkey(vector&z,T key){return lower_bound(z.begin(),z.end(),key)-z.begin();} ll myceil(ll a,ll b){return (a+b-1)/b;} template auto vec(const int (&d)[n],const T &init=T()){ if constexpr (id(d,init)); else return init; } #ifdef LOCAL #include #define SWITCH(a,b) (a) #else #define debug(...) static_cast(0) #define debugg(...) static_cast(0) #define SWITCH(a,b) (b) #endif struct Timer{ clock_t start; Timer(){ start=clock(); ios::sync_with_stdio(false); cin.tie(nullptr); cout<>testcase; for(int i=0;i #include templateconstexpr std::enable_if_t,T> epsilon(){return 1e-10;} templateconstexpr std::enable_if_t,T>epsilon(){return 0;} template struct Point3d{ static constexpr T eps=epsilon(); static constexpr T T_abs(T x){return xx+=rhs.x; this->y+=rhs.y; this->z+=rhs.z; return *this; } Point3d &operator-=(const Point3d&rhs){ this->x-=rhs.x; this->y-=rhs.y; this->z-=rhs.z; return *this; } Point3d &operator*=(const T&rhs){ this->x*=rhs; this->y*=rhs; this->z*=rhs; return *this; } Point3d &operator/=(const T&rhs){ this->x/=rhs; this->y/=rhs; this->z/=rhs; return *this; } friend Point3d operator+(const Point3d&lhs,const Point3d&rhs){return Point3d(lhs)+=rhs;} friend Point3d operator-(const Point3d&lhs,const Point3d&rhs){return Point3d(lhs)-=rhs;} friend Point3d operator*(const Point3d&lhs,const T&rhs){return Point3d(lhs)*=rhs;} friend Point3d operator/(const Point3d&lhs,const T&rhs){return Point3d(lhs)/=rhs;} friend bool operator==(const Point3d&lhs,const Point3d&rhs){return T_abs(lhs.x-rhs.x)<=eps&&T_abs(lhs.y-rhs.y)<=eps&&T_abs(lhs.z-rhs.z)<=eps;} friend bool operator!=(const Point3d&lhs,const Point3d&rhs){return !(lhs==rhs);} friend bool operator<(const Point3d&lhs,const Point3d&rhs){ if(lhs.x!=rhs.x)return lhs.x(const Point3d&lhs,const Point3d&rhs){return rhs=(const Point3d&lhs,const Point3d&rhs){return !(lhs>(std::istream&is,Point3d&p){ is>>p.x>>p.y>>p.z; return is; } friend std::ostream &operator<<(std::ostream&os,const Point3d&p){ os< Point3dconvert()const{ Point3dres(this->x,this->y,this->z); return res; } }; template Point3d cross(const Point3d&a,const Point3d&b){return Point3d(a.y*b.z-a.z*b.y,a.z*b.x-a.x*b.z,a.x*b.y-a.y*b.x);} template T dot(const Point3d&a,const Point3d&b){return a.x*b.x+a.y*b.y+a.z*b.z;} using R=double; R yaru(R a,R b,R c){ R theta=acos((a*a+c*c-b*b)/(2*a*c)); R res=numbers::pi*2*(1-cos(theta))/3; res-=cos(theta)*sin(theta)*sin(theta)*numbers::pi/3; res*=a*a*a; return res; } void SOLVE(){ Point3da,b; R c,d; cin>>a>>c>>b>>d; if(c>d)swap(a,b),swap(c,d); R dst=sqrt((a-b).norm()); if(c+d<=dst)fin(0); if(dst+c<=d)fin(numbers::pi*4/3*c*c*c); cout<