programming assignment soluton