(defobject o1 ())

(defobject o2 ())

(defobject o3 ())

(defobject o4 (o1 o2))

(defobject o5 (o2 o3))

(defobject o6 (o4 o5))

(defmethod (o1 'hi x y)
  (print newline "o1 here x=" x " y=" y)
  (call-next-method))

(defmethod (o2 'hi x y)
  (print newline "o2 here x=" x " y=" y)
  (call-next-method))

(defmethod (o3 'hi x y)
  (print newline "o3 here x=" x " y=" y)
  (call-next-method))

(defmethod (o4 'hi x y)
  (print newline "o4 here x=" x " y=" y)
  (call-next-method))

(defmethod (o5 'hi x y)
  (print newline "o5 here x=" x " y=" y)
  (call-next-method))

(defmethod (o6 'hi x y)
  (print newline "o6 here x=" x " y=" y)
  (call-next-method))

(define newline "
")

(define (main)
  (o4 'hi 1 2)
  (o5 'hi 3 4)
  (o6 'hi 5 6))
