using System;
public class ThisBaseClass
where A: ThisBaseClass
where B: ThatBaseClass, new()
where C: class
{ }
public class ThatBaseClass
where B: ThatBaseClass, new()
where A: ThisBaseClass
where C: class
{ }
public class ThisClass: ThisBaseClass
where A: ThisClass
where B: ThatClass, new()
where C: class
{ }
public class ThatClass: ThatBaseClass
where B: ThatClass, new()
where A: ThisClass
where C: class
{ }
public class ThisClass: ThisClass
{ }
public class ThatClass: ThatClass
{ }
public class Test
{
public static void Main ()
{ }
}