#include <bits/stdc++.h>
using namespace std;
#pragma warning(disable : 4996)
const int N = 1007;
struct Circle {
  long long x, y, r;
};
int n;
vector<Circle> vc, v1, v2;
bool cmp(Circle a, Circle b) {
  if (a.r < b.r) return true;
  return false;
}
bool A[N], B[N];
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    double x, y, r;
    cin >> x >> y >> r;
    Circle tmp;
    tmp.x = x;
    tmp.y = y;
    tmp.r = r;
    vc.push_back(tmp);
  }
  sort(vc.begin(), vc.end(), cmp);
  reverse(vc.begin(), vc.end());
  for (int i = 0; i < vc.size(); i++) {
    int ind1 = -1, ind2 = -1;
    for (int j = v1.size() - 1; j >= 0; j--) {
      Circle t = v1[j];
      long long d =
          (vc[i].x - t.x) * (vc[i].x - t.x) + (vc[i].y - t.y) * (vc[i].y - t.y);
      if (d < t.r * t.r) {
        ind1 = j;
        break;
      }
    }
    for (int j = v2.size() - 1; j >= 0; j--) {
      Circle t = v2[j];
      long long d =
          (vc[i].x - t.x) * (vc[i].x - t.x) + (vc[i].y - t.y) * (vc[i].y - t.y);
      if (d < t.r * t.r) {
        ind2 = j;
        break;
      }
    }
    if (ind1 == -1) {
      v1.push_back(vc[i]);
      A[v1.size() - 1] = true;
    } else if (ind2 == -1) {
      v2.push_back(vc[i]);
      B[v2.size() - 1] = true;
    } else if (ind1 != -1 && !A[ind1]) {
      v1.push_back(vc[i]);
      A[v1.size() - 1] = true;
    } else if (ind2 != -1 && !B[ind2]) {
      v2.push_back(vc[i]);
      B[v2.size() - 1] = true;
    } else
      v2.push_back(vc[i]);
  }
  long long ans = 0;
  for (int i = 0; i < v1.size(); i++)
    if (A[i])
      ans += v1[i].r * v1[i].r;
    else
      ans -= v1[i].r * v1[i].r;
  for (int i = 0; i < v2.size(); i++)
    if (B[i])
      ans += v2[i].r * v2[i].r;
    else
      ans -= v2[i].r * v2[i].r;
  printf("%.17lf", ans * acos(-1.0));
  return 0;
}
