for (int s = 1; s < 1 << (n - 1); s++) {
for (int i = 0; i < n; i++) {
d[i][s] = INF;
if(s&(1<<i))continue;
for (int j = 1; j < n; j++) {
if (s&(1 << j)) {
d[i][s] = min(d[i][s], dist(i, j) + d[j][s ^ (1 << j)]);
}
}
}
}