Final Implementation(with promotion)

Works :)