func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int read() {     char ch = getchar();     int x = 0, f = 1;     while (ch <  0  || ch >  9 ) f = ch ==  -  ? -1 : 1, ch = getchar();     while (ch >=  0  && ch <=  9 ) x = x * 10 + ch -  0 , ch = getchar();     return x * f;   }   inline int sqr(int x) { return x * x; }   inline int dis(int x1, int y1, int x2, int y2) {     return sqr(x2 - x1) + sqr(y2 - y1);   }   const int N = 24, MAXN = N + 10;   int xo, yo;   int x[MAXN], y[MAXN];   int dp[1 << N], pre[1 << N], w[MAXN][MAXN];   int main(int argc, char *argv[]) {     ios::sync_with_stdio(false);     cin.tie(0);     xo = read(), yo = read();     int n = read(), msk = (1 << n) - 1;     for (int i = (0); i <= (n - 1); i += (1)) x[i] = read(), y[i] = read();     x[n] = xo, y[n] = yo;     for (int i = (0); i <= (n); i += (1))       for (int j = (i + 1); j <= (n); j += (1))         w[i][j] = w[j][i] = dis(x[i], y[i], x[j], y[j]);     memset(dp, 0x3f, sizeof(dp));     dp[0] = 0;     for (int s = (0); s <= (msk); s += (1))       if (dp[s] != 0x3f3f3f3f)         for (int i = (0); i <= (n - 1); i += (1))           if (((s >> i) & 1) == 0) {             int k = s | (1 << i);             if (dp[s] + w[n][i] + w[i][n] < dp[k])               dp[k] = dp[s] + w[n][i] + w[i][n], pre[k] = s;             for (int j = (i + 1); j <= (n - 1); j += (1))               if (((k >> j) & 1) == 0) {                 int l = k | (1 << j);                 if (dp[s] + w[n][i] + w[i][j] + w[j][n] < dp[l])                   dp[l] = dp[s] + w[n][i] + w[i][j] + w[j][n], pre[l] = s;               }             break;           }     printf( %d n , dp[msk]);     printf( 0  );     for (int x = msk; x; x = pre[x]) {       for (int i = (0); i <= (n - 1); i += (1))         if (((x ^ pre[x]) >> i) & 1) printf( %d  , i + 1);       printf( 0  );     }     putchar(  n );     return 0;   }   