Pagini recente » Cod sursa (job #1153418) | Cod sursa (job #756063) | Cod sursa (job #2455848) | Cod sursa (job #1480084) | Cod sursa (job #2273154)
/**
* Worg
*/
#include <cstdio>
#include <algorithm>
FILE *fin = freopen("sortare.in", "r", stdin); FILE *fout = freopen("sortare.out", "w", stdout);
const int MAX_N = 5000 + 5;
//-------- Data --------
int n;
int a[MAX_N], b[MAX_N], c[MAX_N];
int pos[MAX_N], ans[MAX_N];
int h;
//-------- --------
void ReadInput() {
scanf("%d", &n);
for (int i = 2; i <= n; i++) {
scanf("%d%d%d", &a[i], &b[i], &c[i]);
}
}
void Solve(int size) {
if(size <= 0) {
return;
}
h++;
if(size == 1) {
ans[pos[1]] = 1; return;
}
if (a[size] != b[size] && a[size] != c[size] && b[size] != c[size]) { /// Case 1 : they are all distinct
ans[pos[c[size]]] = size;
ans[pos[b[size]]] = size - 1;
std::swap(pos[size], pos[c[size]]);
std::swap(pos[size - 1], pos[b[size]]);
Solve(size - 2);
} else { /// Case 2 : we have at least two equal elements
if (a[size] == b[size]) {
ans[pos[a[size]]] = size;
std::swap(pos[a[size]], pos[size]);
} else if (b[size] == c[size]) {
ans[pos[b[size]]] = size;
std::swap(pos[b[size]], pos[size]);
}
Solve(size - 1);
}
}
void PrintOutput() {
printf("%d\n", h);
for (int i = 1; i <= n; i++) {
printf("%d ", ans[i]);
}
}
int main() {
ReadInput();
for (int i = 1; i <= n; i++) {
pos[i] = i;
}
Solve(n);
PrintOutput();
return 0;
}