#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_enter();
  const int N = 10;
  static _imp_string NAMES[N - 0 + 1] = {
      _imp_str_literal(""),           _imp_str_literal("ZULU,Z"),
      _imp_str_literal("BLOGGS,A"),   _imp_str_literal("BLOGGS,Q"),
      _imp_str_literal("STEPHENS,P"), _imp_str_literal("STEPHENS,F"),
      _imp_str_literal("MCLEOD,R"),   _imp_str_literal("MACLEOD,R"),
      _imp_str_literal("SMITH,F"),    _imp_str_literal("KNOTT,A"),
      _imp_str_literal("TRUEMAN,F")};
  auto void STRINGSORT(_imp_string * X, int F, int T);
  int I;
  STRINGSORT(NAMES, 1, N);
  if (NAMES[1] == _imp_str_literal("BLOGGS,A") &&
      NAMES[5] == _imp_str_literal("MCLEOD,R") &&
      NAMES[N] == _imp_str_literal("ZULU,Z")) {
    PRINTSTRING(_imp_str_literal("TEST OK"));
  }
  for (I = 1; I != N + 1; I += 1)
    PRINTSTRING(_imp_join(NAMES[I], TOSTRING(NL)));
  auto void STRINGSORT(_imp_string * X, int FROM, int TO) {
    _imp_enter();
    int L;
    int U;
    _imp_string D;
    if (FROM >= TO) {
      _imp_leave();
      return;
    }
    L = FROM;
    U = TO;
    D = X;
    do {
      while (L < U && D > X) L = L + 1;
      if (L >= U) break;
      *X(/*index missing*/) = X;
      while (L < U && X > D) U = U - 1;
      *X(/*index missing*/) = X;
    } while (L < U);
    *X(/*index missing*/) = D;
    L = L - 1;
    U = U + 1;
    if (FROM < L) STRINGSORT(X, FROM, L);
    if (TO > U) STRINGSORT(X, U, TO);
    _imp_leave();
  }

  _imp_leave();
  exit(0);
  return (0);
}
