#include <bits/stdc++.h>
using namespace std;
double minix,maxix;
class circle
{
public:
double x0,y0,r;
pair<double,double> width;
circle()
{
cin>>x0>>y0>>r;
if(x0-r<minix)
{
minix=x0-r;
}
if(x0+r>maxix)
{
maxix=x0+r;
}
}
pair<double,double> getwidth(double x)
{
width.first=y0;
width.second=y0;
if(x<=x0-r or x>=x0+r)
{
return width;
}
x=fabs((double)x-x0);
double y = sqrt(r*r - x*x);
width.first-=y;
width.second+=y;
return width;
}
};
int main() {
int n,i,j;
minix=2000;
maxix=-2000;
cin>>n;
circle c[n];
double x,ans=0;
pair < double, double > currwidth;
for(x=minix;x<maxix;x+=0.002)
{
double totalwidth=0;
vector < pair<double,double> > widths;
for(i=0;i<n;i++)
{
widths.push_back(c[i].getwidth(x));
}
sort(widths.begin(),widths.end());
currwidth=widths[0];
for(i=1;i<n;i++)
{
if(currwidth.second>=widths[i].second)
{
continue;
}
else if(currwidth.second<widths[i].first)
{
totalwidth+=currwidth.second - currwidth.first;
currwidth=widths[i];
}
else
{
currwidth.second=widths[i].second;
}
}
totalwidth+=currwidth.second - currwidth.first;
ans+=totalwidth*0.002;
}
cout<<ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRvdWJsZSBtaW5peCxtYXhpeDsKY2xhc3MgY2lyY2xlCnsKICAgIHB1YmxpYzoKICAgIGRvdWJsZSB4MCx5MCxyOwogICAgcGFpcjxkb3VibGUsZG91YmxlPiB3aWR0aDsKICAgIGNpcmNsZSgpCiAgICB7CiAgICAgICAgY2luPj54MD4+eTA+PnI7CiAgICAgICAgaWYoeDAtcjxtaW5peCkKICAgICAgICB7CiAgICAgICAgCW1pbml4PXgwLXI7CiAgICAgICAgfQogICAgICAgIGlmKHgwK3I+bWF4aXgpCiAgICAgICAgewogICAgICAgIAltYXhpeD14MCtyOwogICAgICAgIH0KICAgIH0KICAgIHBhaXI8ZG91YmxlLGRvdWJsZT4gZ2V0d2lkdGgoZG91YmxlIHgpCiAgICB7CiAgICAgICAgd2lkdGguZmlyc3Q9eTA7CiAgICAgICAgd2lkdGguc2Vjb25kPXkwOwogICAgICAgIGlmKHg8PXgwLXIgb3IgeD49eDArcikKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiB3aWR0aDsKICAgICAgICB9CiAgICAgICAgeD1mYWJzKChkb3VibGUpeC14MCk7CiAgICAgICAgZG91YmxlIHkgPSBzcXJ0KHIqciAtIHgqeCk7CiAgICAgICAgd2lkdGguZmlyc3QtPXk7CiAgICAgICAgd2lkdGguc2Vjb25kKz15OwogICAgICAgIHJldHVybiB3aWR0aDsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgaW50IG4saSxqOwogICAgbWluaXg9MjAwMDsKICAgIG1heGl4PS0yMDAwOwogICAgY2luPj5uOwogICAgY2lyY2xlIGNbbl07CiAgICBkb3VibGUgeCxhbnM9MDsKICAgIHBhaXIgPCBkb3VibGUsIGRvdWJsZSA+IGN1cnJ3aWR0aDsKICAgIGZvcih4PW1pbml4O3g8bWF4aXg7eCs9MC4wMDIpCiAgICB7CiAgICAgICAgZG91YmxlIHRvdGFsd2lkdGg9MDsKICAgICAgICB2ZWN0b3IgPCBwYWlyPGRvdWJsZSxkb3VibGU+ID4gd2lkdGhzOwogICAgICAgIGZvcihpPTA7aTxuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIHdpZHRocy5wdXNoX2JhY2soY1tpXS5nZXR3aWR0aCh4KSk7CiAgICAgICAgfQogICAgICAgIHNvcnQod2lkdGhzLmJlZ2luKCksd2lkdGhzLmVuZCgpKTsKICAgICAgICBjdXJyd2lkdGg9d2lkdGhzWzBdOwogICAgICAgIGZvcihpPTE7aTxuO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKGN1cnJ3aWR0aC5zZWNvbmQ+PXdpZHRoc1tpXS5zZWNvbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoY3VycndpZHRoLnNlY29uZDx3aWR0aHNbaV0uZmlyc3QpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRvdGFsd2lkdGgrPWN1cnJ3aWR0aC5zZWNvbmQgLSBjdXJyd2lkdGguZmlyc3Q7CiAgICAgICAgICAgICAgICBjdXJyd2lkdGg9d2lkdGhzW2ldOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY3VycndpZHRoLnNlY29uZD13aWR0aHNbaV0uc2Vjb25kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRvdGFsd2lkdGgrPWN1cnJ3aWR0aC5zZWNvbmQgLSBjdXJyd2lkdGguZmlyc3Q7CiAgICAgICAgYW5zKz10b3RhbHdpZHRoKjAuMDAyOwogICAgfQogICAgY291dDw8YW5zOwoJcmV0dXJuIDA7Cn0K