#include <bits/stdc++.h>
using namespace std;
long long int powmod(long long int a, int b, int n) {
  long long int rm = 1;
  while (b) {
    if (b % 2) {
      rm = (rm * a) % n;
    }
    a = (a * a) % n;
    b /= 2;
  }
  return rm;
}
int mask[16777216 + 100], n, x[30], y[30], track[16777216 + 100];
int getdis(int id1, int id2) {
  return (x[id1] - x[id2]) * (x[id1] - x[id2]) +
         (y[id1] - y[id2]) * (y[id1] - y[id2]);
}
int main() {
  int lm, setbit, tx, ty;
  cin >> tx >> ty >> n;
  for (int i = 0; i < n; ++i) cin >> x[i] >> y[i];
  x[n] = tx;
  y[n] = ty;
  lm = (1 << n) - 1;
  mask[0] = 0;
  for (int num = 1; num <= lm; ++num) {
    if (num % 2)
      setbit = 0;
    else {
      for (int i = 0; i < n; ++i)
        if (num & (1 << i)) {
          setbit = i;
          break;
        }
    }
    mask[num] = 2 * getdis(n, setbit) + mask[num - (1 << setbit)];
    track[num] = num - (1 << setbit);
    for (int i = 0; i < n; ++i) {
      if (i != setbit && num & (1 << i)) {
        int dis = getdis(i, setbit) + getdis(setbit, n) + getdis(i, n);
        if (mask[num - (1 << setbit) - (1 << i)] + dis < mask[num]) {
          mask[num] = mask[num - (1 << setbit) - (1 << i)] + dis;
          track[num] = num - (1 << setbit) - (1 << i);
        }
      }
    }
  }
  cout << mask[lm] << endl;
  int start = lm, path[60][2], ct[60], t = 0;
  memset(ct, -1, sizeof(ct));
  ;
  ++t;
  path[t][++ct[t]] = 0;
  while (start) {
    int mov = start - track[start];
    for (int i = 0; i < n; ++i) {
      if (mov & (1 << i)) {
        ++t;
        path[t][++ct[t]] = i + 1;
      }
    }
    start -= mov;
    ++t;
    path[t][++ct[t]] = 0;
  }
  for (int i = 1; i < t; ++i) {
    for (int j = 0; j <= ct[i]; ++j) {
      printf("%d ", path[i][j]);
    }
  }
  printf("0\n");
  return 0;
}
