#include <bits/stdc++.h>
using namespace std;
int read() {
  int f = 1, x = 0;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + s - '0';
    s = getchar();
  }
  return x * f;
}
struct node {
  int x, y;
  node() {}
  node(int X, int Y) { x = X, y = Y; }
} dot[24 + 5];
int dis[24 + 5][24 + 5], f[(1 << 24) + 5], fa[(1 << 24) + 5], Ans[100];
int main() {
  int x = read(), y = read(), n = read();
  dot[0] = node(x, y);
  for (int i = 1; i <= n; i++) {
    x = read(), y = read();
    dot[i] = node(x, y);
  }
  memset(f, -1, sizeof(f)), f[0] = 0;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j < i; j++)
      dis[i][j] = dis[j][i] = (dot[i].x - dot[j].x) * (dot[i].x - dot[j].x) +
                              (dot[i].y - dot[j].y) * (dot[i].y - dot[j].y);
  for (int i = 0; i <= (1 << n) - 1; i++)
    if (f[i] != -1) {
      for (int j = 1; j <= n; j++)
        if (!(1 << (j - 1) & i)) {
          int t = i | (1 << (j - 1)), tmp = f[i] + 2 * dis[j][0];
          if (f[t] == -1 || f[t] > tmp) f[t] = tmp, fa[t] = i;
          for (int k = 1; k <= n; k++)
            if (!(1 << (k - 1) & t)) {
              int t2 = t | (1 << (k - 1));
              tmp = f[i] + dis[j][0] + dis[j][k] + dis[k][0];
              if (f[t2] == -1 || f[t2] > tmp) f[t2] = tmp, fa[t2] = i;
            }
          break;
        }
    }
  int len = 0;
  x = (1 << n) - 1;
  printf("%d\n", f[x]);
  while (x) {
    int pr = fa[x], tmp = x ^ pr;
    Ans[++len] = 0;
    for (int i = 1; i <= n; i++)
      if ((1 << (i - 1)) & tmp) Ans[++len] = i;
    x = pr;
  }
  for (int i = len + 1; i >= 1; i--) printf("%d ", Ans[i]);
  return 0;
}
