#include <bits/stdc++.h>
using namespace std;
struct Point {
double x, y;
};
inline double dist(const Point &a, const Point &b) {
return hypot(a.x - b.x, a.y - b.y);
}
struct MDMTSP {
int n, m;
vector<Point> pts;
vector<vector<double>> d;
MDMTSP(int n, int m) : n(n), m(m), pts(n) {
d.assign(n, vector<double>(n, 0));
}
void set_point(int i, double x, double y) {
pts[i] = {x, y};
}
void build_dist() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
d[i][j] = dist(pts[i], pts[j]);
}
}
}
double best_cost = 1e18;
vector<int> best_assignment; // 각 salesman에게 몇 개씩 배정했는지
void dfs(int idx, int left, vector<int>& assign) {
if (idx == m) {
if (left == 0) {
// assign대로 route 구성
int cur = 1;
double total_cost = 0;
for (int k = 0; k < m; k++) {
double cost = 0;
int prev = 0; // depot
for (int j = 0; j < assign[k]; j++, cur++) {
cost += d[prev][cur];
prev = cur;
}
cost += d[prev][0];
total_cost += cost;
}
if (total_cost < best_cost) {
best_cost = total_cost;
best_assignment = assign;
}
}
return;
}
for (int take = 0; take <= left; take++) {
assign[idx] = take;
dfs(idx + 1, left - take, assign);
}
}
void solve_and_print() {
vector<int> assign(m, 0);
dfs(0, n - 1, assign);
// best_assignment에 따라 실제 노드 나눠서 출력
int cur = 1;
for (int k = 0; k < m; k++) {
for (int j = 0; j < best_assignment[k]; j++, cur++) {
cout << cur << " ";
}
cout << "0\n";
}
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
MDMTSP solver(n, m);
for (int i = 0; i < n; i++) {
double x, y;
cin >> x >> y;
solver.set_point(i, x, y);
}
solver.build_dist();
solver.solve_and_print();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgUG9pbnQgewogICAgZG91YmxlIHgsIHk7Cn07CgppbmxpbmUgZG91YmxlIGRpc3QoY29uc3QgUG9pbnQgJmEsIGNvbnN0IFBvaW50ICZiKSB7CiAgICByZXR1cm4gaHlwb3QoYS54IC0gYi54LCBhLnkgLSBiLnkpOwp9CgpzdHJ1Y3QgTURNVFNQIHsKICAgIGludCBuLCBtOwogICAgdmVjdG9yPFBvaW50PiBwdHM7CiAgICB2ZWN0b3I8dmVjdG9yPGRvdWJsZT4+IGQ7CgogICAgTURNVFNQKGludCBuLCBpbnQgbSkgOiBuKG4pLCBtKG0pLCBwdHMobikgewogICAgICAgIGQuYXNzaWduKG4sIHZlY3Rvcjxkb3VibGU+KG4sIDApKTsKICAgIH0KCiAgICB2b2lkIHNldF9wb2ludChpbnQgaSwgZG91YmxlIHgsIGRvdWJsZSB5KSB7CiAgICAgICAgcHRzW2ldID0ge3gsIHl9OwogICAgfQoKICAgIHZvaWQgYnVpbGRfZGlzdCgpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykgewogICAgICAgICAgICAgICAgZFtpXVtqXSA9IGRpc3QocHRzW2ldLCBwdHNbal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGRvdWJsZSBiZXN0X2Nvc3QgPSAxZTE4OwogICAgdmVjdG9yPGludD4gYmVzdF9hc3NpZ25tZW50OyAvLyDqsIEgc2FsZXNtYW7sl5Dqsowg66qHIOqwnOyUqSDrsLDsoJXtlojripTsp4AKCiAgICB2b2lkIGRmcyhpbnQgaWR4LCBpbnQgbGVmdCwgdmVjdG9yPGludD4mIGFzc2lnbikgewogICAgICAgIGlmIChpZHggPT0gbSkgewogICAgICAgICAgICBpZiAobGVmdCA9PSAwKSB7CiAgICAgICAgICAgICAgICAvLyBhc3NpZ27rjIDroZwgcm91dGUg6rWs7ISxCiAgICAgICAgICAgICAgICBpbnQgY3VyID0gMTsKICAgICAgICAgICAgICAgIGRvdWJsZSB0b3RhbF9jb3N0ID0gMDsKICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbTsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgZG91YmxlIGNvc3QgPSAwOwogICAgICAgICAgICAgICAgICAgIGludCBwcmV2ID0gMDsgLy8gZGVwb3QKICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFzc2lnbltrXTsgaisrLCBjdXIrKykgewogICAgICAgICAgICAgICAgICAgICAgICBjb3N0ICs9IGRbcHJldl1bY3VyXTsKICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IGN1cjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY29zdCArPSBkW3ByZXZdWzBdOwogICAgICAgICAgICAgICAgICAgIHRvdGFsX2Nvc3QgKz0gY29zdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0b3RhbF9jb3N0IDwgYmVzdF9jb3N0KSB7CiAgICAgICAgICAgICAgICAgICAgYmVzdF9jb3N0ID0gdG90YWxfY29zdDsKICAgICAgICAgICAgICAgICAgICBiZXN0X2Fzc2lnbm1lbnQgPSBhc3NpZ247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCB0YWtlID0gMDsgdGFrZSA8PSBsZWZ0OyB0YWtlKyspIHsKICAgICAgICAgICAgYXNzaWduW2lkeF0gPSB0YWtlOwogICAgICAgICAgICBkZnMoaWR4ICsgMSwgbGVmdCAtIHRha2UsIGFzc2lnbik7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgc29sdmVfYW5kX3ByaW50KCkgewogICAgICAgIHZlY3RvcjxpbnQ+IGFzc2lnbihtLCAwKTsKICAgICAgICBkZnMoMCwgbiAtIDEsIGFzc2lnbik7CgogICAgICAgIC8vIGJlc3RfYXNzaWdubWVudOyXkCDrlLDrnbwg7Iuk7KCcIOuFuOuTnCDrgpjriKDshJwg7Lac66ClCiAgICAgICAgaW50IGN1ciA9IDE7CiAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBtOyBrKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBiZXN0X2Fzc2lnbm1lbnRba107IGorKywgY3VyKyspIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgY3VyIDw8ICIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8ICIwXG4iOwogICAgICAgIH0KICAgIH0KfTsKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBNRE1UU1Agc29sdmVyKG4sIG0pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBkb3VibGUgeCwgeTsKICAgICAgICBjaW4gPj4geCA+PiB5OwogICAgICAgIHNvbHZlci5zZXRfcG9pbnQoaSwgeCwgeSk7CiAgICB9CiAgICBzb2x2ZXIuYnVpbGRfZGlzdCgpOwoKICAgIHNvbHZlci5zb2x2ZV9hbmRfcHJpbnQoKTsKfQ==