procedure main() every 1 to 10 do write(rand_sub(292929)) end procedure rand_sub(x) static ring,m if /ring then { m := 10^9 every (seed | ring) := list(55) seed[1] := \x | ?(m-1) seed[2] := 1 every seed[n := 3 to 55] := (seed[n-2]-seed[n-1])%m every ring[(n := 0 to 54) + 1] := seed[1 + (34 * (n + 1)%55)] every n := *ring to 219 do { ring[1] -:= ring[-24] ring[1] %= m put(ring,get(ring)) } } ring[1] -:= ring[-24] ring[1] %:= m if ring[1] < 0 then ring[1] +:= m put(ring,get(ring)) return ring[-1] end