// Component
interface Component {
    void operation();
}

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

// Decorator
class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    public void operation() {
        component.operation();
    }
}

// Concrete Decorator A
class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }

    public void operation() {
        super.operation();
        System.out.println("ConcreteDecoratorA operation");
    }
}

// Concrete Decorator B
class ConcreteDecoratorB extends Decorator {
    public ConcreteDecoratorB(Component component) {
        super(component);
    }

    public void operation() {
        super.operation();
        System.out.println("ConcreteDecoratorB operation");
    }
}

public class DecoratorMain {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        component.operation();
        System.out.println();

        Component decoratorA = new ConcreteDecoratorA(component);
        decoratorA.operation();
        System.out.println();

        Component decoratorB = new ConcreteDecoratorB(decoratorA);
        decoratorB.operation();

        // Cleanup
        // ...
    }
}
