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