def ll_insert(head, name, phone):
    new_node = {'name': name, 'phone': phone, 'next': None}

    if head is None:
        return new_node

    cur = head
    prev = None
    while cur is not None:
        if cur['name'] == name:
            cur['phone'] = phone
            return head
        prev = cur
        cur = cur['next']

    prev['next'] = new_node
    return head


def ll_find(head, name):
    cur = head
    while cur is not None:
        if cur['name'] == name:
            return cur['phone']
        cur = cur['next']
    return None


def ll_delete(head, name):
    if head is None:
        return None

    if head['name'] == name:
        return head['next']

    prev = head
    cur = head['next']

    while cur is not None:
        if cur['name'] == name:
            prev['next'] = cur['next']
            return head
        prev = cur
        cur = cur['next']

    return head


def ll_list_all(head):
    result = []
    cur = head
    while cur is not None:
        result.append((cur['name'], cur['phone']))
        cur = cur['next']

    result.sort(key=lambda x: x[0])
    return result
