abstract class Pizza {
    abstract boolean vegetarisch(); 
    abstract Pizza ZwiebelnNachLamm();
    abstract public String toString();
}//--End of Class--

class Boden extends Pizza {
  boolean vegetarisch() {
   return (true);  
  }
  Pizza ZwiebelnNachLamm() {  
   return this; 
  }  
  public String toString() { 
    return "new Boden";  
  }
}//--End of Class--


class TomatenPizza extends Pizza { 
 Pizza p;
 TomatenPizza(Pizza p) {
   this.p = p;  
 }
 boolean vegetarisch() {
  return (true && p.vegetarisch()) ;
 }
 Pizza ZwiebelnNachLamm() {
  return new TomatenPizza(p.ZwiebelnNachLamm()); 
 }
 public String toString() {   
  return "new TomatenPizza (" + p.toString() + ")";
 }
}//--End of Class--


class ZwiebelPizza extends Pizza {
  Pizza p;
  ZwiebelPizza(Pizza p) {
    this.p = p; 
 }
 boolean vegetarisch() {
  return (true && p.vegetarisch());  
}
  Pizza ZwiebelnNachLamm() {
    return new LammPizza(p.ZwiebelnNachLamm()); 
}
  public String toString() {   
   return "new ZwiebelPizza (" + p.toString() + ")"; 
}
}//--End of Class--


class LammPizza extends Pizza {  
Pizza p;
LammPizza(Pizza p) {
   this.p = p;
 }
 boolean vegetarisch() {return (false && p.vegetarisch());  }
 Pizza ZwiebelnNachLamm() {
   return new LammPizza(p.ZwiebelnNachLamm());  
}
  public String toString() {  
  return "new LammPizza (" + p.toString() + ")"; 
 }
}//--End of Class--


class Hut {
  static Pizza p = new LammPizza(new ZwiebelPizza(new TomatenPizza(new Boden())));
  static Pizza q = new ZwiebelPizza(new Boden());  
 public static void main(String[] s) { 
  System.out.println(p);    
  System.out.println(p.ZwiebelnNachLamm());
  System.out.println(p.vegetarisch()); 
  System.out.println(q);  
  System.out.println(q.ZwiebelnNachLamm());
  System.out.println(q.vegetarisch());
 }
}//--End of Class--
