Examples
Input: ([('connect', 'Alice', 'Bob'), ('hangup', 'Alice', 'Bob')],)
Expected Output: ['Connection established between Alice and Bob', 'Alice and Bob are disconnected']
Explanation: The pair connects successfully, then the same pair disconnects.
Input: ([('connect', 'Eve', 'Eve')],)
Expected Output: ['Eve cannot connect with Eve']
Explanation: A user cannot connect to themself, so the exception message is recorded.
Input: ([('connect', 'Ann', 'Ben'), ('connect', 'Cara', 'Dan'), ('clear_all',), ('connect', 'Cara', 'Dan')],)
Expected Output: ['Connection established between Ann and Ben', 'Connection in use. Please try later', None, 'Connection established between Cara and Dan']
Explanation: The second connect fails because the line is busy. clear_all resets the line, allowing the later connect.
Input: ([('connect', 'Tom', 'Jerry'), ('hangup', 'Jerry', 'Tom'), ('hangup', 'Jerry', 'Jerry')],)
Expected Output: ['Connection established between Tom and Jerry', 'Jerry and Tom are disconnected', 'Jerry cannot hangup with Jerry']
Explanation: The active pair can hang up in either order. Hanging up with the same user name is invalid.
Input: ([],)
Expected Output: []
Explanation: With no operations, there are no recorded results.
Input: ([('connect', 'A', 'B'), ('hangup', 'C', 'D')],)
Expected Output: ['Connection established between A and B', None]
Explanation: Trying to hang up a pair that is not active does nothing and records None.