left can be empty