#include <bits/stdc++.h>
using namespace std;
inline void pi(int x) {
  if (x == 0) {
    putchar('0');
    return;
  }
  char c[10];
  int k = 0;
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  while (x) {
    int nx = x / 10;
    c[k++] = x - nx * 10;
    x = nx;
  }
  while (k--) {
    putchar(c[k] + '0');
  }
}
inline void pin(const int& x) {
  pi(x);
  putchar('\n');
};
inline void pl(long long x) {
  if (x == 0) {
    putchar('0');
    return;
  }
  char c[19];
  int k = 0;
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  while (x) {
    long long nx = x / 10;
    c[k++] = x - nx * 10;
    x = nx;
  }
  while (k--) {
    putchar(c[k] + '0');
  }
}
inline void pln(const long long& x) {
  pl(x);
  putchar('\n');
};
inline void gi(int& val) {
  val = 1;
  char c;
  do {
    c = getchar();
  } while (c != '-' && (c < '0' || c > '9'));
  int zn = 1;
  if (c == '-') {
    zn = -1;
    c = getchar();
  }
  val = c - '0';
  c = getchar();
  while (c >= '0' && c <= '9') {
    val *= 10;
    val += c - '0';
    c = getchar();
  }
  val *= zn;
}
inline void gl(long long& val) {
  val = 1;
  char c;
  do {
    c = getchar();
  } while (c != '-' && (c < '0' || c > '9'));
  int zn = 1;
  if (c == '-') {
    zn = -1;
    c = getchar();
  }
  val = c - '0';
  c = getchar();
  while (c >= '0' && c <= '9') {
    val *= 10;
    val += c - '0';
    c = getchar();
  }
  val *= zn;
}
inline void gl(long long& val1, long long& val2) {
  gl(val1);
  gl(val2);
}
inline void gi(int& val1, int& val2) {
  gi(val1);
  gi(val2);
}
inline void gl(long long& val1, long long& val2, long long& val3) {
  gl(val1);
  gl(val2);
  gl(val3);
}
inline void gi(int& val1, int& val2, int& val3) {
  gi(val1);
  gi(val2);
  gi(val3);
}
inline void gai(int* a, int n) {
  for (int i = 0; i < n; i++) {
    gi(a[i]);
  }
}
inline void gal(long long* a, int n) {
  for (int i = 0; i < n; i++) {
    gl(a[i]);
  }
}
inline void pai(int* a, int n) {
  for (int i = 0; i < n; i++) {
    if (i) {
      putchar(' ');
    }
    pi(a[i]);
  }
}
inline void pain(int* a, int n) {
  for (int i = 0; i < n; i++) {
    if (i) {
      putchar(' ');
    }
    pi(a[i]);
  }
  putchar('\n');
}
inline void mygets(char* b, const bool flag = false) {
  int n = 0;
  char c;
  do {
    c = getchar();
  } while ((!flag && c == ' ') || c == '\n' || c == '\t');
  if (c == EOF) {
    b[n] = '\0';
    return;
  }
  do {
    b[n++] = c;
    c = getchar();
  } while (c != '\n' && (flag || c != ' ') && c != EOF && c != '\t');
}
inline void mygets(string& b, const bool flag = false) {
  b.clear();
  char c;
  do {
    c = getchar();
  } while ((!flag && c == ' ') || c == '\n' || c == '\t');
  if (c == EOF) {
    return;
  }
  do {
    b.push_back(c);
    c = getchar();
  } while (c != '\n' && (flag || c != ' ') && c != EOF && c != '\t');
}
inline void getc(char& b) {
  b = getchar();
  while (b == ' ' || b == '\n') {
    b = getchar();
  }
}
inline void myputs(const string b) {
  for (int i = 0; i < b.size(); ++i) {
    putchar(b[i]);
  }
}
inline void putsn(const string b) {
  myputs(b);
  putchar('\n');
}
inline void putc(const char b) { putchar(b); }
inline void putcn(const char b) {
  putchar(b);
  putchar('\n');
}
int magical(const string s) {
  int p = 1;
  const int base = 777;
  int _hash = 0;
  for (int i = 0; i < s.size(); i++) {
    _hash += s[i] * p;
    p *= base;
  }
  return _hash;
}
const int N = 1e3 + 7, M = 150000, mod = 1000000007, inf = 1000000007;
const long long lmod = 1000000007, linf = 1e18 + 77;
const long double eps = 1e-9;
struct circle {
  long long x, y, r;
  circle(){};
  circle(long long _x, long long _y, long long _r) {
    x = _x;
    y = _y;
    r = _r;
  }
  long long dist(const circle& b) {
    long long dx = x - b.x;
    long long dy = y - b.y;
    return dx * dx + dy * dy;
  }
  long double ldist(const circle& b) {
    long double dx = x - b.x;
    long double dy = y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
  long double s() { return acos(0) * 2 * (long double)r * r; }
} a[N];
int k[N];
int main() {
  srand(magical("magic <3"));
  ios_base::sync_with_stdio(false);
  int n;
  gi(n);
  for (int i = 0; i < n; i++) {
    long long x, y, r;
    gl(x, y, r);
    a[i] = circle(x, y, r);
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (i == j) {
        continue;
      }
      long long dist = a[i].dist(a[j]);
      if (a[j].r >= a[i].r && (a[j].r - a[i].r) * (a[j].r - a[i].r) >= dist) {
        k[i]++;
      }
    }
  }
  long double ans = 0;
  for (int i = 0; i < n; i++) {
    if (k[i] == 0 || k[i] == 1) {
      ans += a[i].s();
    } else {
      if (k[i] % 2 == 0) {
        ans -= a[i].s();
      } else {
        ans += a[i].s();
      }
    }
  }
  cout << fixed << setprecision(30) << ans << endl;
}
