#include <bits/stdc++.h>
using namespace std;
vector<int> g[1010];
struct Node {
  int x, y, r;
} a[1010];
int i, j, k, n, m, p, f[1010];
long long Ans;
bool b[1010], c[1010];
inline bool Cmp(Node a, Node b) { return a.r < b.r; }
inline double Dis(int x, int y, int X, int Y) {
  return sqrt(1ll * (x - X) * (x - X) + 1ll * (y - Y) * (y - Y));
}
inline void Dfs(int x, bool f) {
  c[x] = f;
  for (int i = 0; i < g[x].size(); i++) Dfs(g[x][i], f ^ 1);
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].r);
  sort(a + 1, a + n + 1, Cmp);
  for (i = 1; i <= n; i++)
    for (j = i + 1; j <= n; j++)
      if (Dis(a[i].x, a[i].y, a[j].x, a[j].y) < a[j].r) {
        f[i] = j;
        g[j].push_back(i);
        break;
      }
  for (i = 1; i <= n; i++)
    if (!f[i]) Dfs(i, 0);
  for (i = 1; i <= n; i++)
    if (!f[i] || c[i])
      Ans += 1ll * a[i].r * a[i].r;
    else
      Ans -= 1ll * a[i].r * a[i].r;
  printf("%.9lf\n", Ans * acos(-1.0));
  return 0;
}
