Cod sursa(job #2612)

Utilizator darklordHabalau Andrei darklord Data 18 decembrie 2006 11:22:59
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#define dim 1002

int n,sol[dim],i,k,l;

int main()
{	freopen ("dame.in","r",stdin);
	freopen ("dame.out","w",stdout);
	scanf("%d",&n);
	k=0;
	for(i=2;i<=n;i+=2)
		sol[++k]=i;
	if(n%12==3||n%12==9)
		for(i=1;i<k;++i)
			sol[i]^=sol[i+1]^=sol[i]^=sol[i+1];

	l=k;
	for(i=1;i<=n;i+=2)
		sol[++k]=i;
	if(n%12==8)
		for(i=l+1;i<=k;i+=2)
			if(i+1<=k)
				sol[i]^=sol[i+1]^=sol[i]^=sol[i+1];

	if(n%12==2)
	{   sol[l+1]^=sol[l+2]^=sol[l+1]^=sol[l+2];

		for(i=l+3;i<k;++i)
			sol[i]^=sol[i+1]^=sol[i]^=sol[i+1];
	}
	if(n%12==3||n%12==9)
	{   for(i=l+1;i<=k-2;i+=2)
		{ 	if(k%2==0)
			{	sol[i]^=sol[i+2]^=sol[i]^=sol[i+2];
				sol[i+1]^=sol[i+3]^=sol[i+1]^=sol[i+3];
			}
			else
				if(i==k-2)
				{   sol[i+1]^=sol[i+2]^=sol[i+1]^=sol[i+2];
					sol[i]^=sol[i+1]^=sol[i]^=sol[i+1];
				}
				else
				{	sol[i]^=sol[i+2]^=sol[i]^=sol[i+2];
					sol[i+1]^=sol[i+3]^=sol[i+1]^=sol[i+3];
				}
		}
	}
	if(n==2||n==3)
	{	printf("%d\n",n-1);
		if(n==2)
			printf("1 1");
		else
			printf("1 1\n2 3");
	}
	else
	{   printf("%d\n",n);
		for(i=1;i<=n;++i)
			printf("%d %d\n",i,sol[i]);
	}
	fclose(stdin);fclose(stdout);
	return 0;
}