code: def find_stacks(node, strict=False):
    
    # First, find all stack operation IDs.
    fso = FindStackOps()
    fso.visit(node)
    # Using those IDs, make annotations onto the push and pop nodes.
    AnnotateStacks(fso.push_pop_pairs, strict).visit(node)
    return node
docs: Find pushes and pops to the stack and annotate them as such.
  
    Args:
      node: An AST node that might contain stack pushes and pops.
      strict: A boolean indicating whether to stringently test whether each
          push and pop are matched. This is not always possible when taking
          higher-order derivatives of code generated in split-motion.
  
    Returns:
      node: The node passed in, but with pushes and pops annotated in AST nodes.