Cod sursa(job #179899)

Utilizator slayer4uVictor Popescu slayer4u Data 16 aprilie 2008 13:57:47
Problema Sortare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>

long depth, max, i, n, x[5001], a[5001], b[5001], c[5001], used[5001];

long egale(long i)
{
	if (a[i] == b[i] || b[i] == c[i] || a[i] == c[i])
		return 1;
	return 0;
}

void do_(long st, long dr)
{
	++depth;
	if (st > dr)
	{
		--depth;
		return;
	}

	max = max < depth ? depth : max;

	long k = egale(dr - st);

	if (k)
	{
		long i = st;
		while (used[i])
			++i;
		x[++x[0]] = i;
		//printf("%ld ", i);
		used[i] = 1;
		do_(st, i - 1);
		do_(i + 1, dr);
	}
	else
	{
		long i = st, l = 0;
		while (used[i] || !l)
		{
			if (!used[i])
				l = 1;
			++i;
		}
		//printf("%ld ", i);
		x[++x[0]] = i;
		used[i] = 1;
		do_(st, i - 1);
		do_(i + 1, dr);
	}
	--depth;
}

int main()
{
	freopen ("sortare.in", "rt", stdin);
	freopen ("sortare.out", "wt", stdout);
	
	scanf("%ld", &n);
	for (i = 1; i < n; ++i)
		scanf("%ld %ld %ld", &a[i], &b[i], &c[i]);

	do_(1, n);

	printf("%ld\n", max);
	for (i = 1; i <= x[0]; ++i)
		printf("%ld ", x[i]);
	printf("\n");
	return 0;
}