def co(self) -> tuple:
    """
    Solve last layer face.

    Returns
    -------
    tuple of (list of str, dict of {'LAST LAYER FACE': int})
        Moves to solve last layer face, statistics (move count in ETM).

    Notes
    -----
    If the last layer face is not solved, rotate the cube so that the
    yellow side is facing down by doing `z2`.

    If the corner in the front-right position on the bottom layer is
    oriented correctly, turn the bottom layer to one which is not
    oriented correctly. Then do `R U R' U'` until the corner is oriented
    correctly.

    Repeat until all four corners are oriented correctly, then rotate
    the cube back by doing `z2`.
    """
    cube = self.cube
    solve = []
    corners = (0,0), (0,-1), (-1,0), (-1,-1)

    if any(cube[0][y][x] != 'D' for y, x in corners):
        self.move('z2')
        solve.append('z2')

    while any(cube[5][y][x] != cube[5][1][1] for y, x in corners):
        if cube[5][0][-1] != 'D':
            pass
        elif cube[5][0][0] != 'D':
            self.move('D')
            solve.append('D')
        elif cube[5][-1][-1] != 'D':
            self.move("D'")
            solve.append("D'")
        else:
            self.move('D2')
            solve.append('D2')

        while cube[5][0][-1] != 'D':
            moves = 'R', 'U', "R'", "U'"
            self.move(moves)
            solve.extend(moves)

    if cube[0][1][1] == 'U':
        self.move('z2')
        solve.append('z2')

    return solve, {'LAST LAYER FACE': len(solve)}