Listing A: Solving the Kids' Ages WITH L0 AS(SELECT 0 AS c UNION ALL SELECT 0), L1 AS(SELECT 0 AS c FROM L0 AS a, L0 AS b), L2 AS(SELECT 0 AS c FROM L1 AS a, L1 AS b), L3 AS(SELECT 0 AS c FROM L2 AS a, L2 AS b), Nums AS(SELECT TOP(36) ROW_NUMBER() OVER(ORDER BY c) AS n FROM L3), Divisors AS ( SELECT C1.n AS age1, C2.n AS age2, C3.n AS age3, COUNT(*) OVER(PARTITION BY C1.n + C2.n + C3.n) AS Cnt FROM Nums AS C1 CROSS JOIN Nums AS C2 CROSS JOIN Nums AS C3 WHERE C1.n * C2.n * C3.n = 36 AND C1.n <= C2.n AND C2.n <= C3.n ) SELECT age1, age2, age3 FROM Divisors WHERE Cnt > 1 AND age3 > age2; -- One born before others (before house) -- AND age1 < age2; -- One born after others (after house)