(define remove-1st
  (lambda (item ls)
    (cond ((null? ls) '())
	  ((eq? (car ls) item) (cdr ls))
	  (else
	   (cons (car ls)
		 (remove-1st (cdr ls)))))))

(define remove-2nd
  (lambda (item ls)
    (cond ((null? ls) '())
	  ((eq? (car ls) item)
	   (cons (car ls)
		 (remove-1st item (cdr ls))))
	  (else
	   (cons (car ls)
		 (remove-2nd item (cdr ls)))))))

(define remove-nth
  (lambda (item ls n)
    (cond ((null? ls) '())
	  ((eq? (car ls) item)
	   (if (= n 1)
	       (cdr ls)
	       (cons item
		     (remove-nth item (cdr ls) (- n 1)))))
	  (else
	   (cons (car ls)
		 (remove-nth item (cdr ls) n))))))

(define append
  (lambda (ls1 ls2)
    (if (null? ls1)
	ls2
	(cons (car ls1)
	      (append (cdr ls1) ls2)))))

(define reverse
  (lambda (ls)
    (if (null? ls)
	'()
	(append (reverse (cdr ls))
		(list (car ls))))))

(define merge
  (lambda (ls1 ls2)
    (cond ((null? ls1) ls2)
	  ((null? ls2) ls1)
	  ((< (car ls1) (car ls2))
	   (cons (car ls1)
		 (merge (cdr ls1) ls2)))
	  (else
	   (cons (car ls2)
		 (merge ls1 (cdr ls2)))))))

(define delete
  (lambda (item ls)
    (cond ((null? ls) '())
	  ((eq? (car ls) item)
	   (delete item (cdr ls)))
	  (else
	   (cons (car ls)
		 (delete item (cdr ls)))))))

(define delete-duplicates
  (lambda (ls)
    (if (null? ls)
      '()
      (cons (car ls) 
            (delete (car ls) 
		    (delete-duplicates (cdr ls)))))))