Cod sursa(job #345193)

Utilizator ionutz32Ilie Ionut ionutz32 Data 2 septembrie 2009 09:40:10
Problema Curcubeu Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.19 kb
var a,b,c,v,col:array[0..1000000] of longint;
n,i:longint;
aux,x,d:int64;
f,g:text;
begin
assign(f,'curcubeu.in');
assign(g,'curcubeu.out');
reset(f);rewrite(g);
readln(f,n,a[1],b[1],c[1]);
if a[1]>b[1] then
   begin
   aux:=a[1];
   a[1]:=b[1];
   b[1]:=aux;
   end;
v[1]:=1;
for i:=2 to n-1 do
    begin
    a[i]:=(a[i-1]*i) mod n;
    b[i]:=(b[i-1]*i) mod n;
    c[i]:=(c[i-1]*i) mod n;
    if a[i]>b[i] then
       begin
       aux:=a[i];
       a[i]:=b[i];
       b[i]:=aux;
       end;
    v[i]:=i;
    end;
v[n]:=n;
for i:=n-1 downto 1 do
    begin
    aux:=v[a[i]];
    d:=aux;
    while (aux<>v[aux]) and (aux<n) do
          aux:=v[aux];
    while d<>aux do
          begin
          v[d]:=aux;
          d:=v[d];
          end;
    while aux<=b[i] do
          begin
          col[aux]:=c[i];
          x:=v[aux+1];
          d:=x;
          while (x<>v[x]) and (x<n) do
                x:=v[x];
          while d<>x do
                begin
                v[d]:=x;
                d:=v[d];
                end;
          v[aux]:=v[b[i]]+1;
          aux:=x;
          end;
    end;
for i:=1 to n-1 do
    writeln(g,col[i]);
close(f);close(g);
end.