#include <bits/stdc++.h>
using namespace std;

int xs, ys, n, dp[1<<24], d[25][25];
array<int, 2> a[24];

int sq(int x){return x*x;}

int BaoThy(int mask)
{
    if(__builtin_popcount(mask)==n) return dp[mask]=0;
    if(dp[mask]!=-1) return dp[mask];
    int res=2e9;
    for (int i=0; i<n; i++){
        if(mask&(1<<i)) continue;
        res=min(res, BaoThy(mask|(1<<i))+2*d[0][i+1]);
        for (int j=i+1; j<n; j++){
            if(mask&(1<<j)) continue;
            res=min(res, BaoThy(mask|(1<<i)|(1<<j))+d[0][i+1]+d[i+1][j+1]+d[j+1][0]);
        }
    }
    return dp[mask]=res;
}

void trace(int mask)
{
    if(__builtin_popcount(mask)==n) return;
    int res=dp[mask];
    for (int i=0; i<n; i++){
        if(mask&(1<<i)) continue;
        if(res==dp[mask|(1<<i)]+2*d[0][i+1]){
            cout << i+1 << " " << 0 << " ";
            trace(mask|(1<<i));
            return;
        }
        for (int j=i+1; j<n; j++){
            if(mask&(1<<j)) continue;
            if(res==dp[mask|(1<<i)|(1<<j)]+d[0][i+1]+d[i+1][j+1]+d[j+1][0]){
                cout << i+1 << " " << j+1 << " " << 0 <<  " ";
                trace(mask|(1<<i)|(1<<j));
                return;
            }
        }
    }
    assert(0);
}

void solve()
{
    memset(dp, -1, sizeof(dp));
    int res=BaoThy(0);
    cout << res << "\n" << 0 << " ";
    trace(0);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    freopen("LFO.inp", "r", stdin);
    //freopen("LFO.out", "w", stdout);
    cin >> xs >> ys >> n;
    for (int i=0; i<n; i++){
        cin >> a[i][0] >> a[i][1];
        int t=sq(a[i][0]-xs)+sq(a[i][1]-ys);
        d[i+1][0]=t;
        d[0][i+1]=t;
    }
    for (int i=0; i<n; i++){
        for (int j=i+1; j<n; j++){
            int t=sq(a[j][0]-a[i][0])+sq(a[j][1]-a[i][1]);
            d[i+1][j+1]=t;
            d[j+1][i+1]=t;
        }
    }
    solve();
    return 0;
}
