code: def combine(*args):
      
      if hasattr(args, '__iter__') and (len(args) > 1):
          subtree = combine(*args[:-1])
          tree = []
          for leaf in subtree:
              for node in args[-1]:
                  if hasattr(leaf, '__iter__'):
                      tree.append(leaf + [node])
                  else:
                      tree.append([leaf] + [node])
          return tree
      else:
          return [[arg] for arg in args[0]]
docs: tool to perform tree search via recursion
      useful for developing the grid in a grid search
  
      Parameters
      ----------
      args : list of lists
  
      Returns
      -------
      list of all the combinations of the elements in the input lists