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

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



import java.io.File;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import java.util.ArrayList;



class Ideone {
 public static void main(String[] args) {
try {
  	Department department = new Department();
	FactoryWorker factoryWorker = new FactoryWorker();
	factoryWorker.setId(Long.valueOf(999));
	factoryWorker.setWorksNights(true);
	department.setEmployee(factoryWorker);
	
	JAXBContext jaxBContext = JAXBContext.newInstance(Department.class);
	Marshaller jaxbMarshaller = jaxBContext.createMarshaller();
	jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
	jaxbMarshaller.marshal(department, System.out);
} catch (Exception e) {
	e.printStackTrace();
}
 }
}


@XmlRootElement(name="Department")
class Department {
   public Department() {}
   @XmlElements({
    @XmlElement(name="Manager", type=Manager.class),
    @XmlElement(name="FactoryWorker", type=FactoryWorker.class)
})
   private Employee employee;
   public void setEmployee(Employee val) {this.employee = val;}
}


class Employee {
   private Long id;
   public Employee() {}
   public Long getId(){return this.id;}
   public void setId(Long val) {this.id = val;}

}

class Manager extends Employee{
   public Manager() {}
   private Integer numberOfProjects;
   public Integer getNumberOfProjects() {return this.numberOfProjects;}
   public void setNumberOfProjects(Integer val) {this.numberOfProjects = val;}

}

class FactoryWorker extends Employee{
    public FactoryWorker() {}
    private Boolean worksNights;
    public Boolean getWorksNights(){return this.worksNights;}
    public void setWorksNights(Boolean val) {this.worksNights = val;}
}