func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Point {     double x, y;     Point() : x(0), y(0) {}     Point(double _x, double _y) : x(_x), y(_y) {}     bool operator<(const Point &b) const { return tie(x, y) < tie(b.x, b.y); }     bool operator==(const Point &b) const { return tie(x, y) == tie(b.x, b.y); }     Point operator+(const Point &b) const { return Point(x + b.x, y + b.y); }     Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }     double operator*(const Point &b) const { return x * b.x + y * b.y; }     double operator%(const Point &b) const { return x * b.y - y * b.x; }     Point operator*(const double &b) const { return Point(x * b, y * b); }     double abs() { return sqrt(abs2()); }     double abs2() { return x * x + y * y; }   };   long long cross(Point o, Point a, Point b) { return (a - o) % (b - o); }   vector<Point> convex_hull(vector<Point> &pt) {     sort(pt.begin(), pt.end());     int top = 0;     vector<Point> stk(2 * pt.size());     for (int i = 0; i < (int)pt.size(); i++) {       while (top >= 2 && cross(stk[top - 2], stk[top - 1], pt[i]) <= 0) top--;       stk[top++] = pt[i];     }     for (int i = pt.size() - 2, t = top + 1; i >= 0; i--) {       while (top >= t && cross(stk[top - 2], stk[top - 1], pt[i]) <= 0) top--;       stk[top++] = pt[i];     }     stk.resize(top - 1);     return stk;   }   int N, R;   int ans;   vector<Point> convexP, chp, sol;   int dis2(Point a, Point b) {     return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);   }   void DFS(int i, int prv, int val) {     if (i >= N) {       if (val > ans) {         ans = val;         sol = chp;       }       return;     }     for (int j = prv; j < (int)convexP.size(); j++) {       int c = 0;       for (auto pt : chp) c += (pt - convexP[j]).abs2();       chp.push_back(convexP[j]);       DFS(i + 1, j, val + c);       chp.pop_back();     }   }   int main() {     vector<Point> pt;     cin >> N >> R;     if (N % 2 == 0) {       for (int i = 0; i < N / 2; i++) {         sol.push_back(Point(R, 0));         sol.push_back(Point(-R, 0));       }       for (int i = 0; i < N; i++)         for (int j = 0; j < i; j++) ans += (sol[i] - sol[j]).abs2();     } else {       for (int i = -R; i <= R; i++) {         for (int j = -R; j <= R; j++) {           if (i * i + j * j <= R * R) {             pt.push_back(Point(i, j));           }         }       }       convexP = convex_hull(pt);       ans = 0;       DFS(0, 0, 0);     }     cout << ans << endl;     for (auto p : sol) cout << p.x <<     << p.y << endl;     return 0;   }   