Pagini recente » Cod sursa (job #1777763) | Cod sursa (job #2393842) | Cod sursa (job #2590366) | Cod sursa (job #76304) | Cod sursa (job #1713134)
#include <cstdio>
#include <algorithm>
#include <vector>
#define MAXN 5000
#define pb(x) push_back(x)
int a[MAXN + 1], b[MAXN + 1], c[MAXN + 1];
int nr = 0;
int rez[MAXN];
inline void add(int x, int y, int n){
int i;
for(i = n - 2; i >= x; i--)
rez[i + 1] = rez[i];
rez[x] = y;
}
void solve(int n){
nr++;
if(n < 3){
rez[0] = 1;
if(n == 2)
rez[1] = 2;
return ;
}
if(a[n] == b[n] || a[n] == c[n] || b[n] == c[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(){
FILE *in = fopen("sortare.in", "r");
int n, i;
fscanf(in, "%d", &n);
for(i = 2; i <= n; i++)
fscanf(in, "%d%d%d", &a[i], &b[i], &c[i]);
fclose(in);
solve(n);
FILE *out = fopen("sortare.out", "w");
fprintf(out, "%d\n", nr);
for(i = 0; i < n; i++)
fprintf(out, "%d ", rez[i]);
fclose(out);
return 0;
}