procedure oddson(j)
   local alist, blist, clist, i

   alist := [0, 1]
   blist := [2, 2 * j]
   clist := [j, j ^ 2 + 1]

   suspend "a=" || alist[1] || ", b=" || blist[1] ||
      ", c=" || clist[1]
   suspend "a=" || alist[2] || ", b=" || blist[2] ||
      ", c=" || clist[2]

   repeat {
      put(alist, blist[�1] / 2)
      put(blist, 2 * clist[-1])
      put(clist, j * clist[-1] + clist[-2])
      suspend "a="  || alist[-1] || ", b=" ||
         blist[-1] || ", c=" || clist[-1]
      get(alist)		# remove debris
      get(blist)
      get(clist)
      }

end

procedure evenson(j)
   local alist, blist, clist, i, count

   alist := [0, 1]
   blist := [1, 2 * j]
   clist := [j / 2, j ^ 2 + 1]

   suspend "a=" || alist[1] || ", b=" || blist[1] ||
      ", c=" || clist[1]
   suspend "a=" || alist[2] || ", b=" || blist[2] ||
      ", c=" || clist[2]

   count := 2

   repeat {
      count +:= 1
      put(alist, clist[�2])
      if count % 2 = 1 then
         put(blist, clist[�1])
      else
         put(blist, 4 * clist[-1])
      put(clist, k / 2 * blist[-1] + clist[-2])
      suspend "a="  || alist[-1] || ", b=" ||
         blist[-1] || ", c=" || clist[-1]
      get(alist)			# remove debris
      get(blist)
      get(clist)
      }

end