Final Implementation(with promotion)

Done!