import java.util.ArrayList;

// Component interface
interface Component {
    void operation();
    void add(Component c);
    void remove(Component c);
    Component getChild(int index);
}

// Leaf class
class Leaf implements Component {
    public void operation() {
        System.out.println("Leaf operation");
    }

    public void add(Component c) {
        // Leaf cannot add a child
    }

    public void remove(Component c) {
        // Leaf cannot remove a child
    }

    public Component getChild(int index) {
        // Leaf does not have any children
        return null;
    }
}

// Composite class
class Composite implements Component {
    private ArrayList<Component> children = new ArrayList<Component>();

    public void operation() {
        System.out.println("Composite operation");
        for (Component c : children) {
            c.operation();
        }
    }

    public void add(Component c) {
        children.add(c);
    }

    public void remove(Component c) {
        children.remove(c);
    }

    public Component getChild(int index) {
        if (index >= 0 && index < children.size()) {
            return children.get(index);
        }
        return null;
    }
}

// Client code
class CompositeMain {
    public static void main(String[] args) {
        Component root = new Composite();
        Component child1 = new Composite();
        Component child2 = new Composite();
        Component leaf1 = new Leaf();
        Component leaf2 = new Leaf();

        root.add(child1);
        root.add(child2);
        child1.add(leaf1);
        child2.add(leaf2);

        root.operation();
    }
}
