#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
double x[7], y[7], r[7];
struct Point {
  double x, y;
  Point() {}
  Point(double x, double y) : x(x), y(y) {}
};
vector<Point> intersect(double x1, double y1, double r1, double x2, double y2,
                        double r2) {
  if (x1 == x2 && y1 == y2) return {};
  r1 *= r1;
  r2 *= r2;
  int R2 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
  int R4 = R2 * R2;
  int d1 = 2 * (r1 + r2);
  int d2 = (r1 - r2) * (r1 - r2) + R4;
  if (d1 * R4 < d2 * R2) return {};
  double x = (x1 + x2) / 2.0 + (x2 - x1) * (r1 - r2) / (2.0 * R2);
  double y = (y1 + y2) / 2.0 + (y2 - y1) * (r1 - r2) / (2.0 * R2);
  if (d1 * R4 == d2 * R2) return {Point(x, y)};
  double d = sqrt(1.0 * d1 / R2 - 1.0 * d2 / R4) / 2.0;
  return {
      Point(x + d * (y2 - y1), y + d * (x1 - x2)),
      Point(x - d * (y2 - y1), y - d * (x1 - x2)),
  };
}
bool on_cicle(double x, double y, double r, Point p) {
  return abs((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) - r * r) < eps;
}
int main() {
  int n;
  vector<Point> ps;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    cin >> x[i] >> y[i] >> r[i];
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j < i; j++) {
      for (Point p : intersect(x[i], y[i], r[i], x[j], y[j], r[j])) {
        bool flag = 1;
        for (Point q : ps) {
          if (fabs(q.x - p.x) < eps && fabs(q.y - p.y) < eps) flag = 0;
        }
        if (flag) ps.push_back(p);
      }
    }
  if (ps.empty()) {
    printf("%d\n", n + 1);
    return 0;
  }
  int e = 0;
  for (int i = 1; i <= n; i++) {
    int cc = 0;
    for (Point p : ps) {
      if (on_cicle(x[i], y[i], r[i], p)) cc++;
    }
    e += max(cc, 1);
  }
  cout << e - ps.size() + 2 << endl;
  return 0;
}
