#include <bits/stdc++.h>
using namespace std;
pair<int, int> pp[30];
int sx, sy;
int dis(int x1, int y1, int x2, int y2) {
  return ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int ort(int p1, int p2) {
  return ((pp[p2].first - pp[p1].first) * (sy - pp[p2].second) -
          (sx - pp[p2].first) * (pp[p2].second - pp[p1].second));
}
bool inLine(int p1, int p2) { return (ort(p1, p2) == 0); }
bool inMid(int p1, int p2) {
  int tx1 = pp[p1].first, tx2 = pp[p2].first, ty1 = pp[p1].second,
      ty2 = pp[p2].second;
  if (tx1 > tx2) swap(tx1, tx2);
  if (ty1 > ty2) swap(ty1, ty2);
  int c1 = ((sx >= tx1) && (sx <= tx2));
  int c2 = ((sy >= ty1) && (sy <= ty2));
  return ((c1 == 1) && (c2 == 1));
}
int disopt(int p1, int p2) {
  if (inLine(p1, p2)) {
    if (inMid(p1, p2))
      return 2 * dis(pp[p1].first, pp[p1].second, pp[p2].first, pp[p2].second);
    else
      return 2 * max(dis(sx, sy, pp[p1].first, pp[p1].second),
                     dis(sx, sy, pp[p2].first, pp[p2].second));
  } else {
    return dis(sx, sy, pp[p1].first, pp[p1].second) +
           dis(pp[p1].first, pp[p1].second, pp[p2].first, pp[p2].second) +
           dis(pp[p2].first, pp[p2].second, sx, sy);
  }
}
int dp[(1 << 24) + 10], n, dir[(1 << 24) + 10];
bool vis[(1 << 24) + 10];
int solve(int mask) {
  if (mask == ((1 << n) - 1)) return 0;
  if (vis[mask]) return dp[mask];
  int lowbit = -1;
  for (int i = 0; i < n; i++) {
    if ((mask & (1 << i)) == 0) {
      lowbit = i;
      break;
    }
  }
  int ans = 1000000000, nmask = mask | (1 << lowbit);
  ans = min(
      ans, 2 * dis(sx, sy, pp[lowbit].first, pp[lowbit].second) + solve(nmask));
  dir[mask] = lowbit;
  for (int i = n - 1; i > lowbit; i--) {
    if ((mask & (1 << i)) == 0) {
      int tans = disopt(i, lowbit) + solve(nmask | (1 << i));
      if (tans < ans) ans = tans, dir[mask] = i;
    }
  }
  vis[mask] = 1;
  return dp[mask] = ans;
}
int main() {
  scanf("%d %d", &sx, &sy);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &pp[i].first, &pp[i].second);
  }
  printf("%d\n", solve(0));
  printf("0 ");
  for (int mask = 0; mask != (1 << n) - 1;) {
    int lowbit = -1;
    for (int i = 0; i < n; i++) {
      if ((mask & (1 << i)) == 0) {
        lowbit = i;
        break;
      }
    }
    int tmask = mask | (1 << lowbit);
    if (dir[mask] == lowbit) {
      printf("%d 0 ", lowbit + 1);
      mask = tmask;
    } else {
      if (inLine(lowbit, dir[mask])) {
        if (inMid(lowbit, dir[mask])) {
          printf("%d 0 %d ", dir[mask] + 1, lowbit + 1);
        } else {
          int t1 = lowbit, t2 = dir[mask];
          if (dis(pp[t1].first, pp[t1].second, sx, sy) >
              dis(pp[t2].first, pp[t2].second, sx, sy))
            swap(t1, t2);
          printf("%d %d 0 ", t1 + 1, t2 + 1);
        }
      } else {
        printf("%d %d 0 ", dir[mask] + 1, lowbit + 1);
      }
      mask = (tmask | (1 << dir[mask]));
    }
  }
}
