#include<bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
typedef long long ll;
const int MODD = 998244353;
const int MOD = 1e9 + 7;
const long long INF = 1e9 + 10;
const int N = 2e5 + 20;
const double epsilon = 1e-4;
int n;
ll mem[N][4];
vector<int> number_of_students_in_each_team;
long long dp(int idx, int remainder,vector<pair<int, int>> &elements)
{
if (idx == elements.size()) return 0;
else if (idx > elements.size() || n - idx < 3) return INF;
auto &ret = mem[idx][remainder];
if (ret != -1) return ret;
ll first = INF, second = INF, third = INF;
first = dp(idx + 3, 0, elements) + (elements[idx + 2].first - elements[idx].first);
if (idx + 3 < elements.size()) second = dp(idx + 4, 1, elements) + (elements[idx + 3].first - elements[idx].first);
if (idx + 4 < elements.size()) third = dp(idx + 5, 2, elements) + (elements[idx + 4].first - elements[idx].first);
return ret = min({first, second, third});
}
void print_dp(int idx, int remainder,vector<pair<int, int>> &elements)
{
if (idx >= elements.size() || n - idx < 3) return;
ll opt = dp(idx, remainder, elements);
ll first = INF, second = INF, third = INF;
first = dp(idx + 3, 0, elements) + (elements[idx + 2].first - elements[idx].first);
if (idx + 3 < elements.size()) second = dp(idx + 4, 1, elements) + (elements[idx + 3].first - elements[idx].first);
if (idx + 4 < elements.size()) third = dp(idx + 5, 2, elements) + (elements[idx + 4].first - elements[idx].first);
if (opt == first)
{
number_of_students_in_each_team.push_back(3);
print_dp(idx + 3, 0, elements);
}
else if (opt == second)
{
number_of_students_in_each_team.push_back(4);
print_dp(idx + 4, 1, elements);
}
else if (opt == third)
{
number_of_students_in_each_team.push_back(5);
print_dp(idx + 5, 2, elements);
}
}
void solve()
{
cin >> n;
vector<pair<int, int>> elements(n);
vector<int> result(n);
for (int i = 0; i < n; i++)
{
cin >> elements[i].first;
elements[i].second = i;
}
memset(mem, -1, sizeof mem);
sort(elements.begin(), elements.end());
ll diversity = dp(0, 3, elements);
print_dp(0, 3, elements);
ll num_of_teams = number_of_students_in_each_team.size();
int student = 0;
for (int i = 0; i < number_of_students_in_each_team.size(); i++)
{
for (int j = 0; j < number_of_students_in_each_team[i]; j++)
{
result[elements[student++].second] = i + 1;
}
}
cout << diversity << " " << num_of_teams << '\n';
for (auto &it: result) cout << it << " ";
elnehaya: cout << '\n';
}
int main() {
fast;
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgaW50IE1PREQgPSA5OTgyNDQzNTM7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBsb25nIGxvbmcgSU5GID0gMWU5ICsgMTA7CmNvbnN0IGludCBOID0gMmU1ICsgMjA7CmNvbnN0IGRvdWJsZSBlcHNpbG9uID0gMWUtNDsKaW50IG47CmxsIG1lbVtOXVs0XTsKdmVjdG9yPGludD4gbnVtYmVyX29mX3N0dWRlbnRzX2luX2VhY2hfdGVhbTsKbG9uZyBsb25nIGRwKGludCBpZHgsIGludCByZW1haW5kZXIsdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiAmZWxlbWVudHMpCnsKICAgIGlmIChpZHggPT0gZWxlbWVudHMuc2l6ZSgpKSByZXR1cm4gMDsKICAgIGVsc2UgaWYgKGlkeCA+IGVsZW1lbnRzLnNpemUoKSB8fCBuIC0gaWR4IDwgMykgcmV0dXJuIElORjsKICAgIAogICAgYXV0byAmcmV0ID0gbWVtW2lkeF1bcmVtYWluZGVyXTsKICAgIGlmIChyZXQgIT0gLTEpIHJldHVybiByZXQ7CiAgICBsbCBmaXJzdCA9IElORiwgc2Vjb25kID0gSU5GLCB0aGlyZCA9IElORjsKICAgIGZpcnN0ID0gZHAoaWR4ICsgMywgMCwgZWxlbWVudHMpICsgKGVsZW1lbnRzW2lkeCArIDJdLmZpcnN0IC0gZWxlbWVudHNbaWR4XS5maXJzdCk7CiAgICBpZiAoaWR4ICsgMyA8IGVsZW1lbnRzLnNpemUoKSkgc2Vjb25kID0gZHAoaWR4ICsgNCwgMSwgZWxlbWVudHMpICsgKGVsZW1lbnRzW2lkeCArIDNdLmZpcnN0IC0gZWxlbWVudHNbaWR4XS5maXJzdCk7CiAgICBpZiAoaWR4ICsgNCA8IGVsZW1lbnRzLnNpemUoKSkgdGhpcmQgPSBkcChpZHggKyA1LCAyLCBlbGVtZW50cykgKyAoZWxlbWVudHNbaWR4ICsgNF0uZmlyc3QgLSBlbGVtZW50c1tpZHhdLmZpcnN0KTsKICAgIHJldHVybiByZXQgPSBtaW4oe2ZpcnN0LCBzZWNvbmQsIHRoaXJkfSk7Cn0Kdm9pZCBwcmludF9kcChpbnQgaWR4LCBpbnQgcmVtYWluZGVyLHZlY3RvcjxwYWlyPGludCwgaW50Pj4gJmVsZW1lbnRzKQp7CiAgICBpZiAoaWR4ID49IGVsZW1lbnRzLnNpemUoKSB8fCBuIC0gaWR4IDwgMykgcmV0dXJuOwogICAgCiAgICBsbCBvcHQgPSBkcChpZHgsIHJlbWFpbmRlciwgZWxlbWVudHMpOwogICAgbGwgZmlyc3QgPSBJTkYsIHNlY29uZCA9IElORiwgdGhpcmQgPSBJTkY7CiAgICBmaXJzdCA9IGRwKGlkeCArIDMsIDAsIGVsZW1lbnRzKSArIChlbGVtZW50c1tpZHggKyAyXS5maXJzdCAtIGVsZW1lbnRzW2lkeF0uZmlyc3QpOwogICAgaWYgKGlkeCArIDMgPCBlbGVtZW50cy5zaXplKCkpIHNlY29uZCA9IGRwKGlkeCArIDQsIDEsIGVsZW1lbnRzKSArIChlbGVtZW50c1tpZHggKyAzXS5maXJzdCAtIGVsZW1lbnRzW2lkeF0uZmlyc3QpOwogICAgaWYgKGlkeCArIDQgPCBlbGVtZW50cy5zaXplKCkpIHRoaXJkID0gZHAoaWR4ICsgNSwgMiwgZWxlbWVudHMpICsgKGVsZW1lbnRzW2lkeCArIDRdLmZpcnN0IC0gZWxlbWVudHNbaWR4XS5maXJzdCk7CgogICAgaWYgKG9wdCA9PSBmaXJzdCkgCiAgICB7CiAgICAgICAgbnVtYmVyX29mX3N0dWRlbnRzX2luX2VhY2hfdGVhbS5wdXNoX2JhY2soMyk7CiAgICAgICAgcHJpbnRfZHAoaWR4ICsgMywgMCwgZWxlbWVudHMpOwogICAgfQogICAgZWxzZSBpZiAob3B0ID09IHNlY29uZCkKICAgIHsKICAgICAgICBudW1iZXJfb2Zfc3R1ZGVudHNfaW5fZWFjaF90ZWFtLnB1c2hfYmFjayg0KTsKICAgICAgICBwcmludF9kcChpZHggKyA0LCAxLCBlbGVtZW50cyk7CiAgICB9IAogICAgZWxzZSBpZiAob3B0ID09IHRoaXJkKSAKICAgIHsKICAgICAgICBudW1iZXJfb2Zfc3R1ZGVudHNfaW5fZWFjaF90ZWFtLnB1c2hfYmFjayg1KTsKICAgICAgICBwcmludF9kcChpZHggKyA1LCAyLCBlbGVtZW50cyk7CiAgICB9Cn0Kdm9pZCBzb2x2ZSgpIAp7CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gZWxlbWVudHMobik7CiAgICB2ZWN0b3I8aW50PiByZXN1bHQobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gZWxlbWVudHNbaV0uZmlyc3Q7CiAgICAgICAgZWxlbWVudHNbaV0uc2Vjb25kID0gaTsKICAgIH0gICAgCiAgICBtZW1zZXQobWVtLCAtMSwgc2l6ZW9mIG1lbSk7CiAgICBzb3J0KGVsZW1lbnRzLmJlZ2luKCksIGVsZW1lbnRzLmVuZCgpKTsKICAgIGxsIGRpdmVyc2l0eSA9IGRwKDAsIDMsIGVsZW1lbnRzKTsKICAgIAogICAgcHJpbnRfZHAoMCwgMywgZWxlbWVudHMpOwogICAgbGwgbnVtX29mX3RlYW1zID0gbnVtYmVyX29mX3N0dWRlbnRzX2luX2VhY2hfdGVhbS5zaXplKCk7CiAgICBpbnQgc3R1ZGVudCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlcl9vZl9zdHVkZW50c19pbl9lYWNoX3RlYW0uc2l6ZSgpOyBpKyspCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1iZXJfb2Zfc3R1ZGVudHNfaW5fZWFjaF90ZWFtW2ldOyBqKyspCiAgICAgICAgewogICAgICAgICAgICByZXN1bHRbZWxlbWVudHNbc3R1ZGVudCsrXS5zZWNvbmRdID0gaSArIDE7CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCBkaXZlcnNpdHkgPDwgIiAiIDw8ICBudW1fb2ZfdGVhbXMgPDwgJ1xuJzsKCiAgICBmb3IgKGF1dG8gJml0OiByZXN1bHQpIGNvdXQgPDwgaXQgPDwgIiAiOwoKICAgIGVsbmVoYXlhOiBjb3V0IDw8ICdcbic7Cn0KaW50IG1haW4oKSB7CiAgICBmYXN0OwogICAgaW50IHQgPSAxOwogIC8vIGNpbiA+PiB0OwogCiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIAogICAgfQogICAgcmV0dXJuIDA7Cn0=