You are given sparse assessment score data from Mercor assessments, where many candidate-question scores are missing and some recorded scores fall outside the valid 0-100 range. Write a PostgreSQL query that returns one row per candidate and assessment with a cleaned average score. Treat negative scores and scores above 100 as invalid, normalize valid scores to the 0-1 range, and impute missing or invalid scores using the average cleaned score for that question within the same assessment. If a question has no valid scores at all, fall back to the assessment-level cleaned average. Return only candidate-assessment pairs that have at least one assignment.