#include <bits/stdc++.h>
using namespace std;
int N, memo[1 << 25];
pair<int, int> arr[30];
int dist(int a, int n) {
  int k1 = arr[n].first - arr[a].first;
  int k2 = arr[n].second - arr[a].second;
  return k1 * k1 + k2 * k2;
}
int dp(int mask) {
  if (__builtin_popcount(mask) == N) {
    return 0;
  }
  if (memo[mask] != 0) return memo[mask];
  int res = 1e9;
  for (int i = 1; i <= N; i++) {
    if (!((mask >> (i - 1) & 1))) {
      res = min(res, dp(mask | (1 << (i - 1))) + 2 * dist(i, 0));
      for (int j = i + 1; j <= N; j++) {
        if (!(mask >> (j - 1) & 1) and i != j) {
          res = min(res, dp(mask | (1 << (i - 1)) | (1 << (j - 1))) +
                             dist(i, 0) + dist(i, j) + dist(j, 0));
        }
      }
      break;
    }
  }
  memo[mask] = res;
  return res;
}
void backtrack(int mask) {
  if (__builtin_popcount(mask) == N) {
    return;
  }
  for (int i = 1; i <= N; i++) {
    if (!((mask >> (i - 1) & 1))) {
      if (dp(mask | (1 << (i - 1))) + 2 * dist(i, 0) == dp(mask)) {
        cout << 0 << " " << i << " ";
        backtrack(mask | (1 << (i - 1)));
        return;
      }
      for (int j = i + 1; j <= N; j++) {
        if (!(mask >> (j - 1) & 1) and i != j) {
          if (dp(mask | (1 << (i - 1)) | (1 << (j - 1))) + dist(i, 0) +
                  dist(i, j) + dist(j, 0) ==
              dp(mask)) {
            cout << 0 << " " << i << " " << j << " ";
            backtrack(mask | (1 << (i - 1)) | (1 << (j - 1)));
            return;
          }
        }
      }
      break;
    }
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  cin >> arr[0].first >> arr[0].second;
  cin >> N;
  for (int i = 1; i <= N; i++) cin >> arr[i].first >> arr[i].second;
  cout << dp(0) << endl;
  backtrack(0);
  cout << 0 << endl;
}
