from typing import Self, Optional

class LinkedList:
    def __init__(self, val, next) -> None:
        self.val = val
        self.next = next
        
    def find(self, val):
        cur = self
        while cur is not None:
            if cur.val == val:
                return cur
            cur = cur.next
        return None
        
    def insert_after(self, target_val: int, new_val: int) -> bool:
        """Finds target_val and inserts a new node with new_val after it."""
        target_node = self.find(target_val)
        if not target_node:
            return False
        # Create new node pointing to target's original next
        new_node = LinkedList(new_val, target_node.next)
        target_node.next = new_node
        return True

    def delete_after(self, target_val: int) -> bool:
        """Finds target_val and deletes the node that follows it."""
        target_node = self.find(target_val)
        if not target_node:
            return False
        if not target_node.next:
            target_node.next = None
            return True
        # Skip the next node
        target_node.next = target_node.next.next
        return True