# question 1
def rotateR(val):
    return val[-1] + val[:-1] if len(val) > 0 else None


# question 2
def rotateL(val):
    return val[:-1] + val[0] if len(val) > 0 else None


# question 3
"""
    The functions rotateR(val) rotateL(val) work for both lists and strings
because they use slicing, which is supported by both data types in Python.

Example rotateR using strings and lists  -- rotateR("abc") == "cab" and rotateR([1,2,3,4]) == [4,1,2,3]
Example rotateL using strings and lists  -- rotateL("abc") == "bca" and rotateL([1,2,3,4]) == [2,3,4,1]
"""


# question 4
def rotateRx(val):
    val[:] = [val[-1]] + val[:-1]


# question 5
'''
    rotateRx cannot be modified to work for strings without returning a value. Python strings are immutable. They cannot be
    modified once they are created:
    ```TypeError: 'str' object does not support item assignment```
    So the only way to achieve this would be to return a value and assign it back.
'''


# question 6
def rotateR2(val):
    return rotateR(rotateR(val))


# question 7
def rotateRx2(val):
    rotateRx(val)
    rotateRx(val)


# question 8
l = [[1, 2, 3]] * 2
print(l)
rotateRx(l[1])
print(l)