updated constructors and toString