 ```
{
Several variations of the same problem: replace all letters
with numbers so the equation is true.

These problems are solved by asking a query

all Send(send,more,money)
all Donald(donald,gerald,robert)

Note: It can take several minutes to calculate for some of the queries,
depending on the CPU speed.

}

Digit = L[0..9]

{
SEND + MORE = MONEY

Solution:

send =  9567
more =  1085
money = 10652

backtracks: 7(solution)/24(total)
}

pred Send(send::L,more::L,money::L) iff
send + more = money &
a::[0..7]->>Digit & a = [s,e,n,d,m,o,r,y] &
m <> 0 & s <> 0 &               {no leading zeros}
send =            1000*s + 100*e + 10*n + d &
more =            1000*m + 100*o + 10*r + e &
money = 10000*m + 1000*o + 100*n + 10*e + y

{
CROSS + ROADS = DANGER

Solution:

cross =  96233
danger = 158746

backtracks: 178776(solution)/223059(total)

}

cross + roads = danger &
aa::[0..]->>Digit & aa = [c,r,o,s,a,d,n,g,e] &
r <> 0 & s <> 0 & c <> 0 &      {no leading zeros}
cross =             10000*c + 1000*r + 100*o + 10*s + s &
roads =             10000*r + 1000*o + 100*a + 10*d + s &
danger = 100000*d + 10000*a + 1000*n + 100*g + 10*e + r

{
DONALD + GERALD = ROBERT

Solution:

donald =  526485
gerald =  197485
robert =  723970

backtracks: 574502(solution)/900554(total)
}

pred Donald(donald::L,gerald::L,robert::L) iff
donald + gerald = robert &
aa::[0..9]->>Digit & aa = [l,a,b,n,e,o,r,g,d,t] &
d <> 0 & g <> 0 & r <> 0 &      {no leading zeros}
donald = 100000*d + 10000*o + 1000*n + 100*a + 10*l + d &
gerald = 100000*g + 10000*e + 1000*r + 100*a + 10*l + d &
robert = 100000*r + 10000*o + 1000*b + 100*e + 10*r + t

```