When comparing bounded types with unbounded types you will find that bounded types __________ the types that can be used as type arguments. At the same time they ____________ the functionality that is available for implementation.