#include <bits/stdc++.h>
using namespace std;
struct RTC {};
double pw2(double x) { return x * x; }
double dist(pair<double, double> a, pair<double, double> b) {
  return sqrt(pw2(a.first - b.first) + pw2(a.second - b.second));
}
const int maxn = 1010;
const double pi = 3.14159265358979323846;
vector<int> g[maxn];
vector<int> roots;
double area[maxn];
double dp[maxn][2][2];
bool calc[maxn][2][2];
double solve(int u, int par_a, int par_b) {
  if (calc[u][par_a][par_b]) return dp[u][par_a][par_b];
  double ans = -100000000000000000LL;
  double tmp = area[u] * ((par_a == 1) ? 1 : -1);
  for (int v : g[u]) tmp += solve(v, 1 - par_a, par_b);
  ans = max(ans, tmp);
  tmp = area[u] * ((par_b == 1) ? 1 : -1);
  for (int v : g[u]) tmp += solve(v, par_a, 1 - par_b);
  ans = max(ans, tmp);
  calc[u][par_a][par_b] = true;
  return dp[u][par_a][par_b] = ans;
}
int main() {
  int n;
  scanf("%d", &n);
  vector<pair<double, pair<double, double> > > vec(n);
  for (int i = 0; i < (n); i++) {
    double x, y, r;
    scanf("%lf %lf %lf", &x, &y, &r);
    vec[i] = make_pair(r, pair<double, double>(x, y));
  }
  sort((vec).begin(), (vec).end());
  for (int i = 0; i < (n); i++) {
    area[i] = pi * pw2(vec[i].first);
    bool isroot = true;
    for (int j = i + 1; j < n; j++) {
      if (dist(vec[i].second, vec[j].second) + vec[i].first <= vec[j].first) {
        g[j].push_back(i);
        isroot = false;
        break;
      }
    }
    if (isroot) roots.push_back(i);
  }
  double ans = 0;
  for (int root : roots) ans += solve(root, 1, 1);
  printf("%.12lf\n", ans);
  return 0;
}
