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