-- Programme de génération des accords.
    with Text_Io;
    use Text_Io;
    procedure Main is
      subtype T_Note is Natural range 21..108;
      type T_Interval is array (1..12) of Natural;
      Interval : T_Interval := (0,1,2,3,4,5,6,7,8,9,10,11);
    begin
 
       for A in 21..97 loop
          for I in 1..Interval'Length-1 loop
             for J in I+1..Interval'length loop
                Put(Integer'Image(Interval(I)+A));
                Put(Integer'Image(Interval(J)+A));
                New_Line;
             end loop;
          end loop;
          for I in 1..Interval'Length-2 loop
             for J in I+1..Interval'Length-1 loop
                for K in J+1..Interval'Length loop
                   Put(Integer'Image(Interval(I)+A));
                   Put(Integer'Image(Interval(J)+A));
                   Put(Integer'Image(Interval(K)+A));
                   New_Line;
                end loop;
             end loop;
          end loop;
          for I in 1..Interval'Length-3 loop
             for J in I+1..Interval'Length-2 loop
                for K in J+1..Interval'Length-1 loop
                   for L in K+1..Interval'length loop
                      Put(Integer'Image(Interval(I)+A));
                      Put(Integer'Image(Interval(J)+A));
                      Put(Integer'Image(Interval(K)+A));
                      Put(Integer'Image(Interval(L)+A));
                      New_Line;
                   end loop;
                end loop;
             end loop;
          end loop;
          for H in 1..Interval'Length-4 loop
             for i in H+1..Interval'Length-3 loop
                for J in I+1..Interval'Length-2 loop
                   for K in J+1..Interval'Length-1 loop
                      for L in K+1..Interval'length loop
                         Put(Integer'Image(Interval(H)+A));
                         Put(Integer'Image(Interval(I)+A));
                         Put(Integer'Image(Interval(J)+A));
                         Put(Integer'Image(Interval(K)+A));
                         Put(Integer'Image(Interval(L)+A));
                         New_Line;
                      end loop;
                   end loop;
                end loop;
             end loop;
          end loop;
       end loop;
    end Main;