@jaki01: Full solution