<think>
Okay, I need to implement the functions step_allowed and step_plan based on the given interface. Let me start by understanding what each function is supposed to do.

First, the step_allowed function. The description says it checks if moving from start to end is allowed. The allowed moves are given as a list. Wait, but the allowed list is probably a list of allowed transitions. But how are these transitions structured? The problem says that the allowed moves are a list, but I need to figure out how each element in allowed represents a move. Wait, maybe each element in allowed is a tuple of (start, end) pairs? Or maybe each allowed move is a string representation of a transition. But the parameters for step_allowed are start and end as strings, and allowed as a list. So perhaps allowed is a list of allowed transitions, where each allowed transition is a pair of start and end states. But how is that represented? For example, if allowed is a list of tuples, like [('a', 'b'), ('b', 'c')], then step_allowed would check if (start, end) is in that list. But the problem says that the allowed moves are a list, but the exact structure isn't specified. Wait, the problem says that step_allowed is to check whether moving from start to end is among the allowed moves. So the allowed list is probably a list of allowed (start, end) pairs. But how are they stored? The allowed list is given as a list, but the elements could be tuples or strings. Wait, the problem says that the allowed is a list, but the elements are not specified. However, the function's parameters are start and end as strings, so maybe allowed is a list of tuples where each tuple is (start, end) pairs. But the problem says that the allowed list is a list of allowed moves. So perhaps each element in allowed is a string that represents a move, like "start_to_end". But that's not clear. Wait, the problem says that step_allowed is to check if moving from start to end is allowed. So the allowed list is a list of allowed transitions. So for example, if allowed is [('a', 'b'), ('b', 'c')], then step_allowed('a', 'b', allowed) would return True, and step_allowed('a', 'c', allowed) would return False. But how is the allowed list structured? The problem says that allowed is a list, but the elements could be tuples. However, the function's parameters are start and end as strings, so maybe the allowed list is a list of tuples where each tuple is (start, end). But the problem says that the allowed list is a list of allowed moves. So the function step_allowed is checking if the (start, end) pair is in the allowed list. So the allowed list is a list of tuples, and the function checks if (start, end) is in that list. But the problem says that the allowed list is a list, but the elements could be any type. However, the function's parameters are start and end as strings, so perhaps the allowed list is a list of tuples of strings. But the problem says that the allowed list is a list, but the elements are not specified. Wait, the problem says that the allowed list is a list of allowed moves. So maybe each element in allowed is a string that represents a move, like "start_to_end". But that's not clear. However, the problem says that step_allowed is to check if moving from start to end is allowed. So the allowed list is a list of allowed transitions. So the allowed list is a list of (start, end) pairs. Therefore, the function step_allowed should check if (