Generate a Python program that has the following intention:

The intention of the program below is to create a Python generator function called p1 that recursively traverses a nested list structure and yields all the elements found at each level of the nesting.

Here's a step-by-step explanation of the code:

1. def p1(arr): - Define a generator function named p1 that takes a single argument, arr, which is expected to be a nested list.
2. i = 0 - Initialize a variable i to keep track of the current index in the arr list.
3. while i < len(arr): - Start a while loop that continues as long as i is less than the length of the arr list.
4. x = arr[i] - Get the element at index i in the arr list and store it in the variable x.
5. if not isinstance(x, list): - Check if the x variable is an instance of the list class.
   * If x is not a list, yield p1(x) - Recursively call the p1 function with the single-element list [x] and yield the result.
   * If x is a list, execute the following block of code:
6. for y in p1(x): - Start a for loop to iterate over the elements yielded by the recursive call to p1(x).
7. yield y - Yield the current element y found in the nested list structure.
8. i += 1 - After processing each element in the arr list, increment the i index by 1 to move to the next element.

The p1 function will continue recursively traversing the nested lists and yielding the elements until the base case is reached, i.e., a list with no nested lists inside it. The output of the generator function will be an iterable of all the elements found in the nested list structure. Provide two versions of response separated with exactly 6 asterisk symbols: ******.
user