import java.util.Set;
 
public class Main {
 
    interface Foo<T> { }
 
    interface SubFoo<T> extends Foo<T> { }
 
    static class Bar { }
 
    public static void main
(String[] args
) {  
        Set<Foo<?>> arg1 = null;
        Set<SubFoo<?>> arg2 = null;
        Set<Foo<Bar>> arg3 = null;
        Set<SubFoo<Bar>> arg4 = null;
 
        Set<Foo<?>> inflexibleParam;
        inflexibleParam = arg1; //success
        inflexibleParam = arg2; //incompatible types
        inflexibleParam = arg3; //incompatible types
        inflexibleParam = arg4; //incompatible types
 
        Set<? extends Foo<?>> flexibleParam;
        flexibleParam = arg1; //success
        flexibleParam = arg2; //success
        flexibleParam = arg3; //success
        flexibleParam = arg4; //success
    }
}
				CmltcG9ydCBqYXZhLnV0aWwuU2V0OwoKcHVibGljIGNsYXNzIE1haW4gewogICAgCiAgICBpbnRlcmZhY2UgRm9vPFQ+IHsgfQogICAgCiAgICBpbnRlcmZhY2UgU3ViRm9vPFQ+IGV4dGVuZHMgRm9vPFQ+IHsgfQogICAgCiAgICBzdGF0aWMgY2xhc3MgQmFyIHsgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgCiAgICAgICAgU2V0PEZvbzw/Pj4gYXJnMSA9IG51bGw7CiAgICAgICAgU2V0PFN1YkZvbzw/Pj4gYXJnMiA9IG51bGw7CiAgICAgICAgU2V0PEZvbzxCYXI+PiBhcmczID0gbnVsbDsKICAgICAgICBTZXQ8U3ViRm9vPEJhcj4+IGFyZzQgPSBudWxsOwogICAgICAgIAogICAgICAgIFNldDxGb288Pz4+IGluZmxleGlibGVQYXJhbTsKICAgICAgICBpbmZsZXhpYmxlUGFyYW0gPSBhcmcxOyAvL3N1Y2Nlc3MKICAgICAgICBpbmZsZXhpYmxlUGFyYW0gPSBhcmcyOyAvL2luY29tcGF0aWJsZSB0eXBlcwogICAgICAgIGluZmxleGlibGVQYXJhbSA9IGFyZzM7IC8vaW5jb21wYXRpYmxlIHR5cGVzCiAgICAgICAgaW5mbGV4aWJsZVBhcmFtID0gYXJnNDsgLy9pbmNvbXBhdGlibGUgdHlwZXMKICAgICAgICAKICAgICAgICBTZXQ8PyBleHRlbmRzIEZvbzw/Pj4gZmxleGlibGVQYXJhbTsKICAgICAgICBmbGV4aWJsZVBhcmFtID0gYXJnMTsgLy9zdWNjZXNzCiAgICAgICAgZmxleGlibGVQYXJhbSA9IGFyZzI7IC8vc3VjY2VzcwogICAgICAgIGZsZXhpYmxlUGFyYW0gPSBhcmczOyAvL3N1Y2Nlc3MKICAgICAgICBmbGV4aWJsZVBhcmFtID0gYXJnNDsgLy9zdWNjZXNzCiAgICB9Cn0=