Abstract Factory produces *families* of related objects that must stay
consistent with each other — e.g. all the widgets for one UI theme.
Implement get_factory(theme) returning a LightFactory or DarkFactory
for 'light'/'dark' (raise ValueError otherwise). Each factory hascreate_button() and create_checkbox(), both .render()-able.
solve(themes) returns [button.render(), checkbox.render()] for each theme.
solve(['light']) → [['light-button', 'light-checkbox']]
Sample tests