added solution and factory method