#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 dp[(1 << 24) + 10], n, dir[(1 << 24) + 10];
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);
  for (int mask = (1 << n) - 1; mask >= 0; mask--) {
    if (mask == ((1 << n) - 1)) {
      dp[mask] = 0;
      continue;
    }
    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) + dp[nmask]);
    dir[mask] = lowbit;
    for (int i = n - 1; i > lowbit; i--) {
      if ((mask & (1 << i)) == 0) {
        int tdis = dis(sx, sy, pp[i].first, pp[i].second) +
                   dis(pp[lowbit].first, pp[lowbit].second, pp[i].first,
                       pp[i].second) +
                   dis(pp[lowbit].first, pp[lowbit].second, sx, sy);
        int tans = tdis + dp[nmask | (1 << i)];
        if (tans < ans) ans = tans, dir[mask] = i;
      }
    }
    dp[mask] = ans;
  }
  printf("%d\n0 ", dp[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 {
      printf("%d %d 0 ", dir[mask] + 1, lowbit + 1);
      mask = (tmask | (1 << dir[mask]));
    }
  }
}
