updated soluiton