#include <bits/stdc++.h>
using namespace std;
pair<pair<double, double>, double> circ[3];
vector<pair<double, double> > points;
double eps = 0.0000001;
double dist(pair<double, double> x, pair<double, double> y) {
  return sqrt((x.first - y.first) * (x.first - y.first) +
              (x.second - y.second) * (x.second - y.second));
}
bool add_intersections(int a, int b) {
  pair<double, double> centrA = circ[a].first;
  pair<double, double> centrB = circ[b].first;
  double r1 = circ[a].second;
  double r2 = circ[b].second;
  double d = dist(centrA, centrB);
  if (r2 + d + eps < r1 || r1 + d + eps < r2) {
    return false;
  }
  if (d > r1 + r2 + eps) {
    return false;
  }
  double cos = (r1 * r1 + d * d - r2 * r2) / (2 * r1 * d);
  double sin = sqrt(1 - cos * cos);
  pair<double, double> v =
      make_pair(centrB.first - centrA.first, centrB.second - centrA.second);
  pair<double, double> v_l =
      make_pair(v.first * cos - v.second * sin, v.first * sin + v.second * cos);
  pair<double, double> v_r =
      make_pair(v.first * cos + v.second * sin, v.second * cos - v.first * sin);
  double sc = r1 / d;
  points.push_back(make_pair(centrA.first + (v_l.first * sc),
                             centrA.second + (v_l.second * sc)));
  points.push_back(make_pair(centrA.first + (v_r.first * sc),
                             centrA.second + (v_r.second * sc)));
  return true;
}
void remove_copies() {
  vector<pair<double, double> > old = points;
  points.clear();
  for (int i = 0; i < old.size(); i++) {
    bool unique = true;
    for (int j = 0; j < points.size(); j++) {
      if (dist(points[j], old[i]) < eps) {
        unique = false;
      }
    }
    if (unique) {
      points.push_back(old[i]);
    }
  }
}
bool on_circle(int nr, pair<double, double> p) {
  double d = dist(circ[nr].first, p);
  return (d + eps > circ[nr].second && d < eps + circ[nr].second);
}
bool edge[3][3];
bool vis[3];
void dfs(int x) {
  vis[x] = 1;
  for (int i = 0; i < 3; i++) {
    if (!vis[i] && edge[x][i]) {
      dfs(i);
    }
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> circ[i].first.first >> circ[i].first.second >> circ[i].second;
  }
  int spsk = 0;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (add_intersections(i, j)) {
        edge[i][j] = 1;
        edge[j][i] = 1;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (!vis[i]) {
      spsk++;
      dfs(i);
    }
  }
  remove_copies();
  int e = 0;
  for (int i = 0; i < n; i++) {
    e++;
    for (int j = 0; j < points.size(); j++) {
      if (on_circle(i, points[j])) {
        e++;
      }
    }
  }
  cout << 2 + e - points.size() - n + spsk - 1 << "\n";
}
