func_code_string: #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 ;   }   