::::::::ox:::::x  x:::::x           y:::::y
 p::::::::::::::pp   r:::::r             oo:::::::::::oox:::::x    x:::::x         y:::::y
 p::::::pppppppp     rrrrrrr               ooooooooooo xxxxxxx      xxxxxxx       y:::::y
 p:::::p                                                                         y:::::y
 p:::::p                                                                        y:::::y
p:::::::p                                                                      y:::::y
p:::::::p              