#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, y;
  int R, u, d, l, r;
  double s;
} madoka[1100];
struct Node {
  int next, to;
} homura[1000010];
int vis[1100], head[1100], n, pos;
double dp[1100][2][2];
bool cmp(node a, node b) { return a.R < b.R; }
void add(int u, int v) {
  homura[++pos].next = head[u];
  homura[pos].to = v;
  head[u] = pos;
}
void dfs(int u, int fa) {
  vis[u] = 1;
  int i, j, k, v;
  double t[2][2];
  memset(t, 0, sizeof t);
  for (i = head[u]; i; i = homura[i].next) {
    v = homura[i].to;
    if (v == fa) continue;
    dfs(v, u);
    for (j = 0; j < 2; j++)
      for (k = 0; k < 2; k++) t[j][k] += dp[v][j][k];
  }
  for (i = 0; i < 2; i++)
    for (j = 0; j < 2; j++)
      dp[u][i][j] = max(t[i ^ 1][j] + (i == 1 ? -1 : 1) * madoka[u].s,
                        t[i][j ^ 1] + (j == 1 ? -1 : 1) * madoka[u].s);
}
int main() {
  int i, j, k;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> madoka[i].x >> madoka[i].y >> madoka[i].R;
    madoka[i].u = madoka[i].y + madoka[i].R;
    madoka[i].d = madoka[i].y - madoka[i].R;
    madoka[i].r = madoka[i].x + madoka[i].R;
    madoka[i].l = madoka[i].x - madoka[i].R;
    madoka[i].s = 3.141592653589793238462 * madoka[i].R * madoka[i].R;
  }
  sort(madoka + 1, madoka + n + 1, cmp);
  for (i = 1; i <= n; i++) {
    for (j = i + 1; j <= n; j++) {
      if (madoka[i].l >= madoka[j].l && madoka[i].r <= madoka[j].r &&
          madoka[i].d >= madoka[j].d && madoka[i].u <= madoka[j].u) {
        add(i, j);
        add(j, i);
        break;
      }
    }
  }
  double sayaka = 0;
  for (i = n; i >= 1; i--) {
    if (!vis[i]) {
      dfs(i, 0);
      sayaka +=
          max(max(dp[i][0][0], dp[i][0][1]), max(dp[i][1][0], dp[i][1][1]));
    }
  }
  printf("%.8lf\n", sayaka);
  return 0;
}
