#include <bits/stdc++.h>
using namespace std;
int x_s, y_s, n;
int sqr(int n) { return n * n; }
void process(vector<int>& a, int index,
             vector<pair<int, pair<int, int> > >& min_time,
             const vector<pair<int, int> >& c) {
  if (min_time[index].first != 1000000000) {
    return;
  }
  for (int i = 0; i < n; ++i) {
    if (a[i] == 1) {
      a[i] = 0;
      process(a, index - (1 << i), min_time, c);
      int time = 2 * (sqr(x_s - c[i].first) + sqr(y_s - c[i].second)) +
                 min_time[index - (1 << i)].first;
      if (time < min_time[index].first) {
        min_time[index].first = time;
        min_time[index].second = make_pair(i, -1);
      }
      a[i] = 1;
      break;
    }
  }
  for (int i = 0; i < n; ++i) {
    if (a[i] == 1) {
      for (int j = 0; j < n; ++j) {
        if ((i != j) && (a[j] == 1)) {
          a[i] = 0;
          a[j] = 0;
          process(a, index - (1 << i) - (1 << j), min_time, c);
          int time = sqr(x_s - c[i].first) + sqr(y_s - c[i].second) +
                     sqr(x_s - c[j].first) + sqr(y_s - c[j].second) +
                     sqr(c[i].first - c[j].first) +
                     sqr(c[i].second - c[j].second) +
                     min_time[index - (1 << i) - (1 << j)].first;
          if (time < min_time[index].first) {
            min_time[index].first = time;
            min_time[index].second = make_pair(i, j);
          }
          a[i] = 1;
          a[j] = 1;
        }
      }
      break;
    }
  }
}
int main() {
  cin >> x_s >> y_s >> n;
  vector<pair<int, int> > c(n);
  for (int i = 0; i < n; ++i) {
    cin >> c[i].first >> c[i].second;
  }
  vector<pair<int, pair<int, int> > > min_time(
      1 << n, make_pair(1000000000, make_pair(-1, -1)));
  min_time[0].first = 0;
  vector<int> a(n, 1);
  process(a, (1 << n) - 1, min_time, c);
  cout << min_time[(1 << n) - 1].first << "\n0 ";
  vector<int> sequence;
  for (int index = (1 << n) - 1; index > 0;) {
    int index_ = index;
    sequence.push_back(min_time[index_].second.first + 1);
    index -= 1 << min_time[index_].second.first;
    if (min_time[index_].second.second != -1) {
      sequence.push_back(min_time[index_].second.second + 1);
      index -= 1 << min_time[index_].second.second;
    }
    sequence.push_back(0);
  }
  for (int i = 0; i < sequence.size(); ++i) {
    cout << sequence[i] << " ";
  }
  return 0;
}
