#include <bits/stdc++.h>
using namespace std;
bool found[10];
double x[3], y[3], r[3];
vector<pair<double, double> > vertices;
vector<pair<double, double> > intersect(int x1, int y1, int r1, int x2, int y2,
                                        int r2) {
  vector<pair<double, double> > pnt;
  if (x1 == x2 && y1 == y2) return pnt;
  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 pnt;
  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) {
    pnt.push_back(make_pair(x, y));
    return pnt;
  }
  double d = sqrt(1.0 * d1 / R2 - 1.0 * d2 / R4) / 2.0;
  pnt.push_back(make_pair(x + d * (y2 - y1), y + d * (x1 - x2)));
  pnt.push_back(make_pair(x - d * (y2 - y1), y - d * (x1 - x2)));
  return pnt;
}
bool same_point(double x1, double y1, double x2, double y2) {
  if (abs(x1 - x2) < (double)(1e-6) && abs(y1 - y2) < (double)(1e-6)) {
    return true;
  }
  return false;
}
bool oncircle(double x, double y, double r, double px, double py) {
  return abs((x - px) * (x - px) + (y - py) * (y - py) - r * r) <
         (double)(1e-6);
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  vector<pair<double, double> > tmp;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> x[i] >> y[i] >> r[i];
  }
  if (n == 1) {
    cout << 2;
    return 0;
  }
  if (n == 2) {
    int i = 0, j = 1;
    tmp = intersect(x[i], y[i], r[i], x[j], y[j], r[j]);
    if (tmp.size() <= 1) {
      cout << 3;
    } else {
      cout << 4;
    }
    return 0;
  }
  int count = 0;
  int bm;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      tmp = intersect(x[i], y[i], r[i], x[j], y[j], r[j]);
      for (int k = 0; k < tmp.size(); k++) {
        bool add = true;
        for (int l = 0; l < vertices.size(); l++) {
          if (same_point(vertices[l].first, vertices[l].second, tmp[k].first,
                         tmp[k].second)) {
            add = false;
            break;
          }
        }
        if (add == true) {
          vertices.push_back(tmp[k]);
        }
      }
    }
  }
  if (vertices.size() == 0) {
    cout << n + 1;
    return 0;
  }
  int e = 0;
  for (int i = 0; i < n; i++) {
    int k = 0;
    for (int j = 0; j < vertices.size(); j++) {
      if (oncircle(x[i], y[i], r[i], vertices[j].first, vertices[j].second)) {
        k++;
      }
    }
    e += max(1, k);
  }
  cout << e - vertices.size() + 2;
  return 0;
}
