Pagini recente » Cod sursa (job #328842) | Cod sursa (job #2826666) | Rating Elena Georgescu (elenaa_g23) | Rating Andrei Cosma (andreicosma) | Cod sursa (job #1744967)
#include <fstream>
using namespace std;
ifstream cin("sortare.in");
ofstream cout("sortare.out");
const int MAXN = 5010;
int a[MAXN], b[MAXN], c[MAXN], answer[MAXN], level = 0;
void Add(int left, int value, int right) {
for (int i = right - 2; i >= left; i--)
answer[i + 1] = answer[i];
answer[left] = value;
}
void Solve(int n) {
level++;
if (n < 3) {
answer[0] = 1;
if (n == 2) {
answer[1] = 2;
level++;
}
return;
}
if (a[n] == b[n] || b[n] == c[n] || c[n] == a[n]) {
if (b[n] == c[n])
a[n] = b[n];
Solve(n - 1);
Add(a[n] - 1, n, n);
}
else {
Solve(n - 2);
if (b[n] > a[n])
Add(a[n] - 1, n - 1, n - 1);
else
Add(a[n] - 2, n - 1, n - 1);
Add(b[n] - 1, n, n);
}
}
int main() {
int n;
cin >> n;
for (int i = 2; i <= n; i++)
cin >> a[i] >> b[i] >> c[i];
Solve(n);
cout << level << "\n";
for (int i = 0; i < n; i++)
cout << answer[i] << " ";
return 0;
}