func_code_string: #include <bits/stdc++.h>   using namespace std;   int x, y, n;   int xs[30], ys[30];   int mem[16777227];   int ALL;   int dt[30][30];   int calc(int mask) {     if (mask == ALL) return 0;     int& res = mem[mask];     if (res != -1) return res;     res = ((int)1e9);     int f = -1;     for (int i = 0; i < n; ++i) {       if ((mask >> i) & 1) continue;       if (f == -1) {         f = i;         res = min(res, calc(mask | (1 << i)) + 2 * dt[n][i]);       } else {         int d = dt[n][i] + dt[n][f] + dt[i][f];         res = min(res, calc(mask | (1 << i) | (1 << f)) + d);       }     }     return res;   }   int sz;   int sol[50];   void build(int mask) {     if (mask == ALL) return;     int& res = mem[mask];     for (int i = 0; i < n; ++i) {       if ((mask >> i) & 1) continue;       if (res == calc(mask | (1 << i)) + 2 * dt[n][i]) {         printf(  %d 0 , i + 1);         build(mask | (1 << i));         return;       }       for (int j = 0; j < n; ++j) {         if (i == j) continue;         if ((mask >> j) & 1) continue;         int d = dt[n][i] + dt[n][j] + dt[i][j];         if (res == calc(mask | (1 << i) | (1 << j)) + d) {           printf(  %d %d 0 , i + 1, j + 1);           build(mask | (1 << i) | (1 << j));           return;         }       }     }     return;   }   inline int dist(int x1, int y1, int x2, int y2) {     return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);   }   int main() {     while (scanf( %d%d , &x, &y) != -1) {       scanf( %d , &n);       ALL = (1 << n) - 1;       for (int i = 0; i < n; ++i) {         scanf( %d%d , xs + i, ys + i);         dt[i][n] = dt[n][i] = dist(xs[i], ys[i], x, y);       }       for (int i = 0; i < n; ++i) {         for (int j = i + 1; j < n; ++j) {           dt[i][j] = dt[j][i] = dist(xs[i], ys[i], xs[j], ys[j]);         }       }       memset(mem, -1, sizeof mem);       int res = calc(0);       printf( %d n0 , res);       build(0);       printf(  n );     }     return 0;   }   