-- $Id: ary3.gnat,v 1.0 2003/06/11 12:08:00 dada Exp $
-- http://dada.perl.it/shootout/
-- Ada 95 code by C.C.

with Text_IO, Ada.Command_Line, Ada.Strings.Fixed;

procedure Ary3 is
   function L_Trim (Source : String; Side : Ada.Strings.Trim_End :=
               Ada.Strings.Left) return String renames Ada.Strings.Fixed.Trim;
   N        : Positive := 1;
begin
   begin
      N := Positive'Value (Ada.Command_Line.Argument (1));
   exception
      when Constraint_Error => null;
   end;
   declare
      type Vect is array (1 .. N) of Integer;
      X, Y     : Vect;
   begin
      for K in Vect'Range loop
         X (K) := K;
         Y (K) := 0;
      end loop;

      for Iter in 1 .. 1000 loop
         for K in reverse Vect'Range loop
            declare
               Y_K      : Integer renames Y (K);
            begin
               Y_K := Y_K + X (K);
            end;
         end loop;
      end loop;
      Text_IO.Put_Line (L_Trim (Integer'Image (Y (1))) &
               Integer'Image (Y (N)));
   end;
end Ary3;