final soultion