based on current situation, pick who
    gets transported next, and return the path
    NOTE - improvement here as there are often
    duplicate paths or backtracking, e.g.

def pick_next_boat_trip(node, m, c, frontier):
    """ 
    based on current situation, pick who
    gets transported next, and return the path
    NOTE - improvement here as there are often
    duplicate paths or backtracking, e.g.
    """
    next_path = []
    cur_path = []
    boat, mult = boat_on_left_bank(node)
    shore = 1 - boat
    m1, c1, m2, c2 = parse_miss_cann(node, m, c)
    if (m1 - 1 >= c1 or m1 == 1) and (m2 + 1 >= c2) and (m1 > 0):
        cur_path = (node[0]-mult,node[1], shore)
        if cur_path not in frontier:
            next_path.append(cur_path)

    if (m1 >= c1-1 or m1 == 0) and (m2 -1 >= c2 or m2 == 0) and ( c1 > 0):
        cur_path = (node[0],node[1]-mult, shore)
        if cur_path not in frontier:
            next_path.append(cur_path)
        
    if (m1 >= c1) and (m2 >= c2) and (m1 > 0) and (c1 > 0):
        cur_path = (node[0]-mult,node[1]-mult, shore)
        if cur_path not in frontier:
            next_path.append(cur_path)
        
    if (m1 - 2 >= c1 or m1 == 2) and (m2 >= c2 or m2 == 0) and (m1 > 1):
        cur_path = (node[0]-(mult*2),node[1], shore)
        if cur_path not in frontier:
            next_path.append(cur_path)
        
    if (m1 >= c1 - 2 or m1 == 0) and (m2 >= c2 + 2 or m2 == 0) and (c1 > 1):
        cur_path = (node[0],node[1]-(mult*2), shore)
        if cur_path not in frontier:
            next_path.append(cur_path)

    #print(next_path)    
    return next_path