def travel_by_plane(state, me, x, y, pos):
    data = get_travel_data(state,pos)
    own = plane_rate(data['dist'])
    if state.money[me] >= own and data['dist'] >= plane_min_distance:
        if pos == len(places) - 2:
            return [('get_souvenir', me, data['from']),
                    ('buy_plane_ticket', me, own), 
                    ('fly', me, data['from'], data['to'])]
        else:
            return [('get_souvenir', me, data['from']),
                    ('buy_plane_ticket', me, own),
                    ('fly', me, data['from'], data['to']),
                    ('travel', me, places[0], places[-1], pos + 1)]
    return False
def travel_by_ferry(state, me, x, y, pos):
    data = get_travel_data(state,pos)
    own = taxi_rate(data['dist'])
    if state.money[me] >= own and \
        data['dist'] <= ferry_max_distance and \
        is_island_to(not_island_to[data['from']], data['to']):
        if pos == len(places) - 2:
            return [('get_souvenir', me, data['from']),
                    ('buy_ferry_ticket', me, own),
                    ('go_by_ferry', me, data['from'], data['to'])]
        else:
            return [('get_souvenir', me, data['from']),
                    ('buy_ferry_ticket', me, own),
                    ('go_by_ferry', me, data['from'], data['to']),
                    ('travel', me, places[0], places[-1], pos + 1)]
    return False
def travel_by_taxi(state, me, x, y, pos):
    data = get_travel_data(state,pos)
    own = taxi_rate(data['dist'])
    if state.money[me] >= own and \
        data['dist'] <= taxi_max_distane and \
        not is_island_to(not_island_to[data['from']], data['to']):
        if pos == len(places) - 2:
            return [('get_souvenir', me, data['from']),
                    ('call_taxi', me, data['from']),
                    ('ride_taxi', me, data['from'], data['to']),
                    ('pay_taxi_driver', me, own)]
        else:
            return [('get_souvenir', me, data['from']),
                    ('call_taxi', me, data['from']),
                    ('ride_taxi', me, data['from'], data['to']),
                    ('pay_taxi_driver', me, own),
                    ('travel', me, places[0], places[-1], pos + 1)]
    return False