Write a thread-safe implementation of a bounded blocking queue. Implement FIFO put, blocking get, and thread-safe size operations. The grading function accepts capacity and a deterministic sequence of operations, returning each completed operation's result. An empty get remains pending until a later put supplies its item.
capacity is an integer. operations contains ['put', value], ['get'], or ['size']. Return a list containing None for completed put operations, queue values for completed get operations, and integers for size operations.
def bounded_blocking_queue(capacity, operations):