code 31051;
procedure POLCHS(N,A);
value N; integer N; array A;
if N>1 then 
begin 
   comment  SCALING;
   integer K,L,TWOPOW;
   TWOPOW:=2;
   for K:=1 step 1 until N-2 do 
   begin 
      A[K]:=A[K]/TWOPOW; TWOPOW:=TWOPOW*2;
   end;
   A[N-1]:=2*A[N-1]/TWOPOW;
   A[N]:=A[N]/TWOPOW;
   A[N-2]:=A[N-2]+A[N];
   comment N<=2 READY;
   for K:=N-2 step -1 until 1 do 
   begin 
      A[K-1]:=A[K-1]+A[K+1]; A[K]:=A[K]*2 + A[K+2];
      for L:=K+1 step 1 until N-2 do 
      A[L]:=A[L]+A[L+2];
   end;
end POLCHS;
        eop