Web Listing 2: Itzik’s Solution WITH Nums(n) AS ( SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 ), Strings(string, strlen) AS ( SELECT CAST(n AS VARCHAR(8)), 1 FROM Nums UNION ALL SELECT CAST(PRV.string + CAST(NXT.n AS VARCHAR(1)) AS VARCHAR(8)), PRV.strlen + 1 FROM Strings AS PRV JOIN Nums AS NXT ON PRV.strlen < 8 AND PRV.string NOT LIKE '%' + CAST(NXT.N AS VARCHAR(1)) + '%' AND NOT EXISTS (SELECT * FROM Nums AS D WHERE D.n <= PRV.strlen AND PRV.strlen + 1 - D.n = ABS(NXT.n - CAST(SUBSTRING(PRV.string, D.n, 1) AS INT))) ) SELECT string FROM Strings WHERE strlen = 8 ORDER BY string;