public class Main 
{
	public static void main(String[] args) {
		Animal a = new Dog();  
		Animal x = a.spawn();
 
 
		Dog b = new Dog();
		Dog y = b.spawn();		
	}

}


class Animal 
{
	protected int _generation = 0;

	public Animal() {
		this(1);
	}
	
	public Animal(int generation) {
		_generation = generation;
	}

	public Animal spawn() {
		System.out.println("From Animal Spawn");
		return new Animal(_generation+1);
	}
}


class Dog extends Animal 
{	
	public Dog() {
		this(1);
	}
	
	public Dog(int generation) {
		_generation = generation;		
	}
	

	@Override
	public Dog spawn() {
		System.out.println("From Dog Spawn");
		return new Dog(_generation + 1);
	}
}