/* package whatever; // don't place package name! */

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

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	abstract class Group<I extends Item<I, G>, G extends Group<I, G>>{
     private List<I> items;
     public List<I> getItems(){ return null; }
     public void setItems(List<I> items){ }
}

abstract class Item<I extends Item<I, G>, G extends Group<I, G>>{
     private List<G> subGroups;
     public List<G> getSubGroups(){ return null; }
     public void setSubGroups(List<G> subGroups){ }
}

class AGroup extends Group<AItem, AGroup> { }         // works
class AItem extends Item<AItem, AGroup> { }           // works
class BGroup extends Group<BItem, BGroup> { }         // works
class BItem extends Item<BItem, BGroup> { }           // works
class MixedGroup extends Group<AItem, MixedGroup> { } // fails
	
	public static void main (String[] args) throws java.lang.Exception
	{
		// your code goes here
	}
}