import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
	public static List<? extends Object> produce(){
		return null; // Whatever
	}
	
	public static void main (String[] args) throws java.lang.Exception
	{
	}
	
	public static void a(NoGeneric noGeneric){
		noGeneric.call(produce());
	}
	
	public static <T> void b(Generic<T> generic){
		generic.call(produce());
	}
	
	public static <T, U extends Generic<T>> void d(U generic){
		generic.call(produce());
	}
	
	public static <T extends Generic> void c(T raw){
		raw.call(produce());
	}
}

class NoGeneric{
	public void call(List<Object> objects){	}
}

class Generic<T> {
	public void call(List<Object> objects){}
}