added alternative solutions