begin
   constant string (1) SNL = "
"
   string(31)array NAMES(1:99)
   routine spec STRINGSORT(string(*)array name X,
                             integer F, T)
   integer I, N

   READ(N) until 1 <= N <= 99;  ! Reject if not in range.
   READSTRING(NAMES(I)) for I=1,1,N
   STRINGSORT(NAMES,1,N)
   PRINTSTRING(NAMES(I).SNL) for I=1,1,N

   routine STRINGSORT(string(*)array name X,
                       integer FROM, TO)
      integer L, U
      string(255) D

      return if FROM >= TO
      L = FROM; U = TO
      D = X(U)

      cycle
         L = L+1 while L < U and X(L) <= D
         exit if L = U
         X(U) = X(L)
         U = U-1 while U > L and X(U) >= D
         exit if U = L
         X(L) = X(U)
      repeat
      ! Now L = U.

      X(U) = D
      L = L-1; U = U+1
      STRINGSORT(X,FROM,L) if FROM < L
      STRINGSORT(X,U,TO) if U < TO
   end

end of program