import Data.List
--import Data.List.Split (chunksOf)
nextstep field | m == 0 = [[]]
where
freecells = elemIndices '-' field
(m
, i
, v
) = minimum $ map (\i
-> let v
= variants i
in (length v
,i
,v
)) freecells
variants i = "123456789" \\ (rownums ++ colnums ++ squnums) where
colnums
= map ((field
!!).(+c
)) [0,9..80] [r
',c'] = map (\x
-> x `
div`
3 * 3) [r
,c
]
showres fields
| null fields
= "No solution"-- | otherwise = (' ':).intersperse ' '.unlines.chunksOf 9.head $ fields
main = do
let f = "--7---34-\
\2---38---\
\1--4----2\
\-2-9-64--\
\-7--4--8-\
\--58-2-1-\
\8----4--1\
\---65---9\
\-32---7--"
aW1wb3J0IERhdGEuTGlzdAotLWltcG9ydCBEYXRhLkxpc3QuU3BsaXQgKGNodW5rc09mKQogCnNvbHZlIGZpZWxkIHwgZWxlbSAnLScgZmllbGQgPSBmaWx0ZXIgKG5vdC5udWxsKSAkIGNvbmNhdE1hcCBzb2x2ZSAkIG5leHRzdGVwIGZpZWxkCiAgICAgICAgICAgIHwgb3RoZXJ3aXNlICAgICAgPSBbZmllbGRdCiAKbmV4dHN0ZXAgZmllbGQgfCBtID09IDAgICAgICA9IFtbXV0KICAgICAgICAgICAgICAgfCBvdGhlcndpc2UgICA9IG1hcCAoXGMgLT4gdGFrZSBpIGZpZWxkICsrIGMgOiBkcm9wIChpKzEpIGZpZWxkKSB2CiAgICB3aGVyZQogICAgICAgIGZyZWVjZWxscyA9IGVsZW1JbmRpY2VzICctJyBmaWVsZAogICAgICAgIChtLCBpLCB2KSA9IG1pbmltdW0gJCBtYXAgKFxpIC0+IGxldCB2ID0gdmFyaWFudHMgaSBpbiAobGVuZ3RoIHYsaSx2KSkgZnJlZWNlbGxzCiAKICAgICAgICB2YXJpYW50cyBpICA9ICIxMjM0NTY3ODkiIFxcIChyb3dudW1zICsrIGNvbG51bXMgKysgc3F1bnVtcykgd2hlcmUKICAgICAgICAgICAgKHIsYykgICA9IGRpdk1vZCBpIDkKICAgICAgICAgICAgcm93bnVtcyA9IHRha2UgOSAuIGRyb3AgKHIqOSkgJCBmaWVsZAogICAgICAgICAgICBjb2xudW1zID0gbWFwICgoZmllbGQhISkuKCtjKSkgWzAsOS4uODBdCiAgICAgICAgICAgIFtyJyxjJ10gPSBtYXAgKFx4IC0+IHggYGRpdmAgMyAqIDMpIFtyLGNdCiAgICAgICAgICAgIHNxdW51bXMgPSBjb25jYXRNYXAgKHRha2UgMyAuIGZsaXAgZHJvcCBmaWVsZCAuIChceCAtPiAoeCtyJykqOStjJykpIFswLi4yXQogCnNob3dyZXMgZmllbGRzIHwgbnVsbCBmaWVsZHMgPSAiTm8gc29sdXRpb24iCi0tICAgICAgICAgICAgICAgfCBvdGhlcndpc2UgICA9ICgnICc6KS5pbnRlcnNwZXJzZSAnICcudW5saW5lcy5jaHVua3NPZiA5LmhlYWQgJCBmaWVsZHMKICAgICAgICAgICAgICAgfCBvdGhlcndpc2UgICA9IGhlYWQgZmllbGRzCiAKbWFpbiA9IGRvCiAgICBsZXQgZiA9ICItLTctLS0zNC1cCiAgICAgICAgICAgIFwyLS0tMzgtLS1cCiAgICAgICAgICAgIFwxLS00LS0tLTJcCiAgICAgICAgICAgIFwtMi05LTY0LS1cCiAgICAgICAgICAgIFwtNy0tNC0tOC1cCiAgICAgICAgICAgIFwtLTU4LTItMS1cCiAgICAgICAgICAgIFw4LS0tLTQtLTFcCiAgICAgICAgICAgIFwtLS02NS0tLTlcCiAgICAgICAgICAgIFwtMzItLS03LS0iCiAgICBwdXRTdHIgJCBzaG93cmVzICQgc29sdmUgZg==