ode)
    end
    return head
  end
end
function broadsearch(node)
  queue = OrderedSet()
  queue:enqueue(node)
  return inbroad, queue, OrderedSet.firstkey
end

local function indepth(stack, top)
  top = stack[top]
  if top then
    for _, node in ipairs(top) do
      stack:insert(node, top)
    end
    return top
  end
end
function depthsearch(node)
  stack = OrderedSet()
  stack:push(node)
  return indepth, stack, OrderedSet.firstkey
end



Node = oo.class()

function Node:goesto(...)
  for i=1, select("#