#include <bits/stdc++.h>
const int MAXN = 5;
const double eps = 1e-4;
struct node {
  double x, y;
  node(double x = 0, double y = 0) : x(x), y(y) {}
  inline bool operator<(const node &rhs) const {
    if (fabs(x - rhs.x) >= eps) return x < rhs.x;
    if (fabs(y - rhs.y) >= eps) return y < rhs.y;
    return 0;
  }
  inline bool operator==(const node &rhs) const {
    return !(*this < rhs) && !(rhs < *this);
  }
} p[MAXN * MAXN << 1];
struct circle {
  double a, b, r;
  circle(double a = 0, double b = 0, double r = 0) : a(a), b(b), r(r) {}
} c[MAXN];
std::vector<node> ans;
inline void getcircle_intersection(circle x, circle y) {
  if (x.r < y.r) std::swap(x, y);
  if (fabs((x.r + y.r) * (x.r + y.r) - (x.a - y.a) * (x.a - y.a) -
           (x.b - y.b) * (x.b - y.b)) < eps) {
    const double dx = (y.a - x.a), dy = (y.b - x.b), k = x.r / (x.r + y.r);
    ans.push_back(node(x.a + dx * k, x.b + dy * k));
    return;
  }
  if (fabs(y.r + sqrt((x.a - y.a) * (x.a - y.a) + (x.b - y.b) * (x.b - y.b)) -
           x.r) < eps) {
    const double dx = (y.a - x.a), dy = (y.b - x.b), k = x.r / (x.r - y.r);
    ans.push_back(node(x.a + dx * k, x.b + dy * k));
    return;
  }
  if ((x.r + y.r) * (x.r + y.r) <
      (x.a - y.a) * (x.a - y.a) + (x.b - y.b) * (x.b - y.b))
    return;
  if (y.r + sqrt((x.a - y.a) * (x.a - y.a) + (x.b - y.b) * (x.b - y.b)) < x.r)
    return;
  const double lk = (x.a - y.a) / (y.b - x.b),
               lb = (x.r * x.r - y.r * y.r + y.a * y.a - x.a * x.a + y.b * y.b -
                     x.b * x.b) /
                    (2 * y.b - 2 * x.b);
  const double fa = lk * lk + 1, fb = 2 * lk * lb - 2 * x.a - 2 * x.b * lk,
               fc = x.a * x.a + x.b * x.b + lb * lb - 2 * x.b * lb - x.r * x.r;
  double dt = fb * fb - 4 * fa * fc;
  if (fabs(dt) > eps && dt < 0) return;
  dt = fabs(dt);
  const double ax1 = (-fb + sqrt(dt)) / (2 * fa),
               ax2 = (-fb - sqrt(dt)) / (2 * fa);
  ans.push_back(node(ax1, lk * ax1 + lb));
  ans.push_back(node(ax2, lk * ax2 + lb));
}
inline bool point_on_circle(const node &x, const circle &y) {
  return fabs((x.x - y.a) * (x.x - y.a) + (x.y - y.b) * (x.y - y.b) -
              y.r * y.r) <= eps;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    double a, b, r;
    scanf("%lf%lf%lf", &a, &b, &r);
    c[i].a = a * cos(233) + b * sin(233);
    c[i].b = -a * sin(233) + b * cos(233);
    c[i].r = r;
  }
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) getcircle_intersection(c[i], c[j]);
  std::sort(ans.begin(), ans.end());
  int sz = std::unique(ans.begin(), ans.end()) - ans.begin();
  int tot = 0;
  for (int i = 1; i <= n; i++) {
    int ptot = 0;
    for (unsigned j = 0; j < sz; j++) ptot += point_on_circle(ans[j], c[i]);
    tot += ptot + !ptot;
  }
  if (sz == 0) tot--;
  printf("%d\n", tot - sz + 2);
  return 0;
}
