The program output does not, however, reveal that the chain is followed in reverse order in an attempt to find an appropriate exception handler.
Revise the program with handlers in M, N, and P that touch the exception without actually handling it. The handlers should reveal, on standard output, that P, N, and M are passed in an attempt to locate a relevant exception handler. Rethrow the exception in each case. See here how this can be done.