Cod sursa(job #48534)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 4 aprilie 2007 21:24:41
Problema Dame Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.17 kb
var a:array[0..1000] of longint;
    f,g:text;
    n,i,q:longint;
begin
 assign(f,'dame.in'); reset(f);
 assign(g,'dame.out'); rewrite(g);
 read(f,n);
 a[0]:=n div 2;
 for i:=1 to n div 2 do
   a[i]:=i*2;
 if (n mod 12=3) or (n mod 12=9) then begin
  for i:=1 to n div 2-1 do
   a[i]:=a[i+1];
  a[n div 2]:=2;
 end;
 i:=1;
 while i<=n do begin
  inc(a[0]);
  a[a[0]]:=i;
  i:=i+2;
 end;
 if n mod 12=8 then begin
  for i:=n div 2+1 to n do
   if (i-(n div 2)) mod 2=1 then begin
    q:=a[i];
    a[i]:=a[i+1];
    a[i+1]:=q;
   end;
 end;
 if n mod 12=2 then begin
  a[n div 2+1]:=3;
  a[n div 2+2]:=1;
  for i:=n div 2+3 to n do
   a[i]:=a[i+1];
  a[n]:=5;
 end;
 if (n mod 12=3) or (n mod 12=9) then begin
  for i:=n div 2+1 to n-2 do
   a[i]:=a[i+2];
  a[n-1]:=1;
  a[n]:=3;
 end;
 if n=1 then begin
  writeln(g,'1');
  writeln(g,'1 1');
 end
 else
  if n=2 then begin
   writeln(g,'1');
   writeln(g,'1 1');
  end
  else
   if n=3 then begin
    writeln(g,'2');
    writeln(g,'1 1');
    writeln(g,'3 2');
   end
   else begin
    writeln(g,n);
    for i:=1 to n do
     writeln(g,i,' ',a[i]);
   end;
 closE(f);
 close(g);
end.