#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int c = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    c = c * 10 + ch - '0';
    ch = getchar();
  }
  return c * f;
}
const int inf = 0x3f3f3f3f;
int dis[30][30], x[30], y[30], _dis[30], _x, _y, n, pos;
int dp[1 << 24], pre[1 << 24];
vector<int> ans;
void path(int i) {
  if (i == 0) return;
  int x = i ^ pre[i];
  ans.push_back(0);
  for (int j = 0; j < n; ++j)
    if ((1 << j) & x) {
      ans.push_back(j + 1);
    }
  path(pre[i]);
}
int getbit(int i) {
  int num = 0;
  while (i) {
    i >>= 1;
    num++;
  }
  return num - 1;
}
int main() {
  _x = read(), _y = read();
  n = read();
  for (int i = 0; i < n; ++i) x[i] = read(), y[i] = read();
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j)
      dis[i][j] = dis[j][i] =
          (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
    _dis[i] = (x[i] - _x) * (x[i] - _x) + (y[i] - _y) * (y[i] - _y);
    dis[i][i] = 0;
  }
  int len = 1 << n;
  memset(dp, inf, sizeof dp);
  dp[0] = 0;
  for (int i = 1; i < len; ++i) {
    pos = getbit(i);
    for (int j = 0; j < pos + 1; ++j)
      if (i & (1 << j)) {
        if (dp[i] > dp[i ^ ((1 << j) | (1 << pos))] + dis[j][pos] + _dis[j] +
                        _dis[pos]) {
          dp[i] = dp[i ^ ((1 << j) | (1 << pos))] + dis[j][pos] + _dis[j] +
                  _dis[pos];
          pre[i] = i ^ ((1 << j) | (1 << pos));
        }
      }
  }
  printf("%d\n", dp[len - 1]);
  path(len - 1);
  ans.push_back(0);
  for (int i = ans.size() - 1; i >= 0; --i) {
    printf("%d ", ans[i]);
  }
  puts("");
}
