#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 1010;
const double PI = 3.14159265358979323846;
tuple<ll, ll, ll> circs[MAXN];
double dp[MAXN][2];
int n;
bool contains(int i, int j) {
  ll x1, y1, r1;
  ll x2, y2, r2;
  tie(x1, y1, r1) = circs[i];
  tie(x2, y2, r2) = circs[j];
  return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) <= r1 * r1;
}
double calc(int circ, int dep, int g) {
  if (dp[circ][g] >= 0) return dp[circ][g];
  int g2 = (dep - g) & 1;
  double a = 0.0, b = 0.0;
  vector<int> C;
  ll rad = get<2>(circs[circ]);
  double area = PI * rad * rad;
  for (int i = circ + 1; i < n; i++) {
    if (contains(circ, i)) {
      bool ok = true;
      for (int j = 0; j < C.size(); j++) {
        if (contains(C[j], i)) {
          ok = false;
          break;
        }
      }
      if (ok) {
        C.push_back(i);
        a += calc(i, dep + 1, g);
        b += calc(i, dep + 1, g ^ 1);
      }
    }
  }
  if (g2 % 2 == 0) {
    a += area;
  } else {
    a -= area;
  }
  if (g % 2 == 0) {
    b += area;
  } else {
    b -= area;
  }
  dp[circ][g] = max(a, b);
  return dp[circ][g];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i < n; i++) {
    ll x, y, r;
    cin >> x >> y >> r;
    circs[i] = make_tuple(x, y, r);
  }
  sort(circs, circs + n, [&](tuple<int, int, int> x, tuple<int, int, int> y) {
    return get<2>(x) > get<2>(y);
  });
  for (int i = 0; i < MAXN; i++) dp[i][0] = dp[i][1] = -1.0;
  vector<bool> root(n, true);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < i; j++) {
      if (contains(j, i)) {
        root[i] = false;
        break;
      }
    }
  }
  double ans = 0.0;
  for (int i = 0; i < n; i++) {
    if (root[i]) {
      ans += calc(i, 0, 0);
    }
  }
  cout << fixed << setprecision(17) << ans << '\n';
  return 0;
}
