import java.util.*;

(1) Company {
    protected String name;
    public Company(String name) { (2) = name; }
    public abstract void Add(Company c); // 增加子公司、办尊处或部门
    public abstract void Delete(Company c); // 删除子公司、办事处或部门
}

class ConcreteCompany extends Company {
    private List<(3)> children = new ArrayList<(4)>();
    // 存储子公司、办事处或部门
    public ConcreteCompany(String name) { super(name); }
    public void Add(Company c) { (5).add(c); }
    public void Delete(Company c) { (6).remove(c); }
}

class HRDepartment extends Company {
    public HRDepartment(String name) { super(name); }
    // 其他代码省略
}

class FinanceDepartment extends Company {
    public FinanceDepartment(String name) { super(name); }
    // 其他代码省略
}

public class Test {
    public static void main(String[] args) {
        ConcreteCompany root = new ConcreteCompany("北京总公司");
        root.Add(new HRDepartment("总公司人力资源部"));
        root.Add(new FinanceDepartment("总公司财务部"));

        ConcreteCompany comp = new ConcreteCompany("上海分公司");
        comp.Add(new HRDepartment("上海分公司人力资源部"));
        comp.Add(new FinanceDepartment("上海分公司财务部"));
        (7);

        ConcreteCompany comp1 = new ConcreteCompany("南京办事处");
        comp1.Add(new HRDepartment("南京办事处人力资源部"));
        comp1.Add(new FinanceDepartment("南京办事处财务部"));
        (8); // 其他代码省略
    }
}
