Cod sursa(job #203108)
#include <stdio.h>
#define NMAX 510
#define FIN "dame.in"
#define FOUT "dame.out"
int n,i,j,poz,pozz,aux;
int impar[NMAX],par[NMAX];
int main()
{
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
scanf("%d", &n);
if (n==1)
{
printf("1\n");
printf("1 ");
printf("1");
}
else
if (n==2)
{
printf("1\n");
printf("1 ");
printf("1");
}
else
if (n==3)
{
printf("2\n");
printf("1 ");
printf("1\n");
printf("2 ");
printf("3");
}
else
if (n>=4)
{
printf("%d\n", n);
for (i=1;i<=n;i++)
if (i%2==0)
par[i/2]=i;
else
impar[i/2+1]=i;
if (n%12==3 || n%12==9)
{
aux=par[n/2];
par[n/2]=par[1];
par[1]=aux;
}
if (n%12==8)
for (i=1;i<=n/2;i+=2)
{
aux=impar[i];
impar[i]=impar[i+1];
impar[i+1]=aux;
}
if (n%12==2)
{
for (i=1;i<=n/2;i++)
if (impar[i]==5)
poz=i;
else
if (impar[i]==1)
{
for (j=1;j<=n/2;j++)
if (impar[j]==3)
{
aux=impar[i];
impar[i]=impar[j];
impar[j]=aux;
}
}
aux=impar[poz];
impar[poz]=impar[n/2];
impar[n/2]=aux;
}
else
if (n%12==3)
{
for (i=1;i<=n/2;i++)
if (impar[i]==3)
poz=i;
for (i=1;i<=n/2;i++)
if (impar[i]==1 )
pozz=i;
aux=impar[poz];
impar[poz]=impar[n/2];
impar[n/2]=aux;
aux=impar[pozz];
impar[pozz]=impar[n/2-1];
impar[n/2-1]=aux;
}
}
if (n>=4)
{
for (i=1;i<=n/2;i++)
printf("%d %d\n",i,par[i]);
for (i=n/2+1;i<=n;i++)
printf("%d %d\n",i,impar[i-n/2]);
}
return 0;
}