What is the intention of the program below?
```
def p1(height, start=1, end=3):
    steps = []
    if height <= 0:
        return steps

    helper = ({1, 2, 3} - {start} - {end}).pop()
    steps.extend(p1(height - 1, start, helper))
    steps.append((start, helper))
    steps.extend(p1(height - 1, helper, end))

    return steps
```