#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline string get() {
  char ch[10000];
  scanf("%s", ch);
  return ch;
}
const int MAX_LG = 21;
const int maxn = 5e3 + 10;
const int base = 29;
const int mod = 1e9 + 7;
const int INF = 1e9;
const int maxq = 2e5 + 10;
int x[maxn], y[maxn];
int dp[(int)2e7];
int pr[(int)2e7];
inline int dis(int x, int y, int x2, int y2) {
  return 1LL * (x - x2) * (x - x2) + 1LL * (y - y2) * (y - y2);
}
int32_t main() {
  x[0] = in(), y[0] = in();
  int n = in();
  for (int i = 1; i <= n; i++) {
    x[i] = in(), y[i] = in();
  }
  for (int mask = 1; mask < (1 << n); mask++) {
    int cnt = __builtin_popcount(mask);
    int what = __builtin_ctz(mask) + 1;
    if (cnt == 1) {
      dp[mask] = dis(x[0], y[0], x[what], y[what]) * 2;
    } else {
      dp[mask] = 2e9;
      if (cnt % 2 == 1) {
        for (int i = 0; i < n; i++) {
          if ((1 << i) & mask) {
            int val =
                dis(x[0], y[0], x[i + 1], y[i + 1]) * 2 + dp[mask ^ (1 << i)];
            if (val < dp[mask]) {
              dp[mask] = val;
              pr[mask] = mask ^ (1 << i);
            }
          }
        }
      } else {
        for (int i = 0; i < n; i++) {
          if (i != what - 1 && (1 << i) & mask) {
            int val = dis(x[0], y[0], x[i + 1], y[i + 1]) +
                      dis(x[0], y[0], x[what], y[what]) +
                      dis(x[i + 1], y[i + 1], x[what], y[what]) +
                      dp[mask ^ (1 << (what - 1)) ^ (1 << i)];
            if (val < dp[mask]) {
              dp[mask] = val;
              pr[mask] = mask ^ (1 << (what - 1)) ^ (1 << i);
            }
          }
          if ((1 << i) & mask) {
            int val =
                dis(x[0], y[0], x[i + 1], y[i + 1]) * 2 + dp[mask ^ (1 << i)];
            if (val < dp[mask]) {
              dp[mask] = val;
              pr[mask] = mask ^ (1 << i);
            }
          }
        }
      }
    }
  }
  cout << dp[(1 << n) - 1] << "\n";
  int cur = ((1 << n) - 1);
  cout << "0 ";
  while (cur) {
    int pre = pr[cur];
    int cnt = __builtin_popcount(pre ^ cur);
    if (cnt == 1) {
      cout << __builtin_ctz(pre ^ cur) + 1 << " 0 ";
    } else {
      int val = pre ^ cur;
      for (int i = 0; i < n; i++) {
        if ((1 << i) & val) {
          cout << i + 1 << " ";
        }
      }
      cout << "0 ";
    }
    cur = pr[cur];
  }
}
