def sort_records(records):
    return sorted(records, key=lambda item: item[0])

def ll_insert(head, name, phone):
    new_node = {"name": name, "phone": phone, "next": None}
    if head is None:
        return new_node
    current = head
    while current is not None:
        if current["name"] == name:
            current["phone"] = phone
            return head
        if current["next"] is None:
            break
        current = current["next"]
    current["next"] = new_node
    return head

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

def ll_delete(head, name):
    if head is None:
        return None
    if head["name"] == name:
        return head["next"]
    current = head
    while current["next"] is not None:
        if current["next"]["name"] == name:
            current["next"] = current["next"]["next"]
            return head
        current = current["next"]
    return head

def ll_list_all(head):
    records = []
    current = head
    while current is not None:
        records.append((current["name"], current["phone"]))
        current = current["next"]
    return sort_records(records)

def ht_create(size=101):
    return [None] * size

def get_bucket_index(name, size):
    total = 0
    for symbol in name:
        total += ord(symbol)
    return total % size

def ht_insert(buckets, name, phone):
    index = get_bucket_index(name, len(buckets))
    buckets[index] = ll_insert(buckets[index], name, phone)

def ht_find(buckets, name):
    index = get_bucket_index(name, len(buckets))
    return ll_find(buckets[index], name)

def ht_delete(buckets, name):
    index = get_bucket_index(name, len(buckets))
    buckets[index] = ll_delete(buckets[index], name)

def ht_list_all(buckets):
    records = []
    for bucket in buckets:
        current = bucket
        while current is not None:
            records.append((current["name"], current["phone"]))
            current = current["next"]
    return sort_records(records)

def bst_insert(root, name, phone):
    new_node = {"name": name, "phone": phone, "left": None, "right": None}
    if root is None:
        return new_node
    current = root
    while True:
        if name < current["name"]:
            if current["left"] is None:
                current["left"] = new_node
                break
            current = current["left"]
        elif name > current["name"]:
            if current["right"] is None:
                current["right"] = new_node
                break
            current = current["right"]
        else:
            current["phone"] = phone
            break
    return root

def bst_find(root, name):
    current = root
    while current is not None:
        if name == current["name"]:
            return current["phone"]
        if name < current["name"]:
            current = current["left"]
        else:
            current = current["right"]
    return None

def bst_delete(root, name):
    parent = None
    current = root
    while current is not None and current["name"] != name:
        parent = current
        if name < current["name"]:
            current = current["left"]
        else:
            current = current["right"]
    if current is None:
        return root
    if current["left"] is not None and current["right"] is not None:
        replacement_parent = current
        replacement = current["right"]
        while replacement["left"] is not None:
            replacement_parent = replacement
            replacement = replacement["left"]
        current["name"] = replacement["name"]
        current["phone"] = replacement["phone"]
        parent = replacement_parent
        current = replacement
    if current["left"] is not None:
        child = current["left"]
    else:
        child = current["right"]
    if parent is None:
        return child
    if parent["left"] is current:
        parent["left"] = child
    else:
        parent["right"] = child
    return root

def bst_list_all(root):
    records = []
    stack = []
    current = root
    while current is not None or stack:
        while current is not None:
            stack.append(current)
            current = current["left"]
        current = stack.pop()
        records.append((current["name"], current["phone"]))
        current = current["right"]
    return records