Pagini recente » Cod sursa (job #2528361) | Cod sursa (job #1521339) | Cod sursa (job #437134) | Cod sursa (job #874497) | Cod sursa (job #2335353)
#include <bits/stdc++.h>
using namespace std;
int Build(int l, int r,
vector<int>& pos, vector<int>& ret, vector<int>& a,
vector<int>& b, vector<int>& c) {
if (pos.empty()) return 1;
if (pos.size() == 1) {
assert(l == r);
ret[pos[0]] = l;
return 1;
}
int len = r - l + 1;
if (a[len] == b[len]) {
ret[pos[a[len]]] = l;
pos.erase(pos.begin() + a[len]);
return 1 + Build(l + 1, r, pos, ret, a, b, c);
}
if (b[len] == c[len]) {
ret[pos[c[len]]] = r;
pos.erase(pos.begin() + c[len]);
return 1 + Build(l, r - 1, pos, ret, a, b, c);
}
ret[pos[b[len]]] = r - 1;
ret[pos[c[len]]] = r;
pos.erase(pos.begin() + max(b[len], c[len]));
pos.erase(pos.begin() + min(b[len], c[len]));
return 1 + Build(l, r - 2, pos, ret, a, b, c);
}
int main() {
ifstream cin("sortare.in");
ofstream cout("sortare.out");
int n; cin >> n;
vector<int> a(n + 1), b(n + 1), c(n + 1);
for (int i = 2; i <= n; ++i) {
cin >> a[i] >> b[i] >> c[i];
--a[i]; --b[i]; --c[i];
if (a[i] > b[i]) swap(a[i], b[i]);
if (a[i] > c[i]) swap(a[i], c[i]);
if (b[i] > c[i]) swap(b[i], c[i]);
}
vector<int> ret(n);
vector<int> pos(n);
iota(pos.begin(), pos.end(), 0);
int max = Build(1, n, pos, ret, a, b, c);
cout << max << endl;
for (int i = 0; i < n; ++i)
cout << ret[i] << " ";
cout << endl;
return 0;
}