PROGRAM LLIST(INPUT, OUTPUT);

TYPE
   ListTyp = ^NodeRec;
   NodeRec = RECORD
		Value: INTEGER;
		Next:  ListTyp
	     END ;

VAR
   Head, P, C, T: ListTyp ;
   V: INTEGER;
   MayBeInList, InList: Boolean;

BEGIN
   NEW(Head);
   Head^.Next := NIL;

   WHILE NOT EOF(INPUT) DO
     BEGIN
      READLN(INPUT, V);
      P := Head;
      MayBeInList := TRUE;
      InList := FALSE;
      WHILE MayBeInList AND NOT InList DO
	BEGIN
	 C := P^.Next;
	 IF (C = NIL) THEN
	    MayBeInList := FALSE
	 ELSE IF (C^.Value > V) THEN
	    MayBeInList := FALSE
	 ELSE IF (C^.Value = V) THEN
	    InList := TRUE
	 ELSE
	    P := C;
        END {WHILE } ;

      IF NOT InList THEN
	BEGIN
	 NEW(T);
	 T^.Next  := P^.Next;
	 T^.Value := V;
	 P^.Next  := T;
	END {IF} 
     END {WHILE} ;

   P := Head^.Next;

   WHILE (P <> NIL) DO
     BEGIN
      WRITELN(OUTPUT, P^.Value:5);
      P := P^.Next
     END {WHILE}

END {LLIST} .
