import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class A<T extends A<T, S>, S extends List<?>> {

	T t;
	S s;
	A<T, S> a;

	Object field = a.<
			T,
			S>getMap(t, s);

	public A() {
		<
				T,
				S>this(null, null);
	}

	public <M, N> A(M param1, N param2) {

	}

	public <M, N> Map<M, N> getMap(M key, N value) {
		return null;
	}

}

class B extends A<B, List<String>> {

	public <M, N> B(M param1, N param2) {
		<
				M,
				N>super(param1, param2);
	}

	public <M, N> Map<M, N> getMap(M key, N value) {
		B b = new <
				M,
				N>B(key, value);
		AMethod method = b::<
				String,
				String>getMap;
		AMethod method2 = super::<
				String,
				String>getMap;
		AMethod method3 = AMap<M>::<
				String,
				String>new;
		AMethod method4 = AMap<M>::<
				String,
				String>createAMap;
		return super.<
				M,
				N>getMap(key, value);
	}
}

interface AMethod {
	Map<String, String> getMap(String key, String value);
}

class AMap<T> extends HashMap<String, String> {
	public <M, N> AMap(String param1, String param2) {

	}

	public static <M, N> AMap<M> createAMap(String param1, String param2) {
		return new AMap<>(param1, param2);
	}
}