({ (to print (syscall 1 #1 ))
(to space (syscall 2 32 ))
(to nl (syscall 2 10 ))
(to printc (syscall 2 #1 ))
(to show 
  ({ (= #1 0 )(= #2 0 )
    (for #3 2 N 
      (if ([ a #3 )
        ({ (} print #3 )(} space )(= #2 #3 )(= #1 (+ #1 1 )))))
    (} nl )(} print #1 )(} space )(} print #2 )(} nl )))

(to sieve 
  ({ (= #1 2 )
    (while (<= (* #1 #1 )N )
      ({ (= #2 (+ #1 #1 ))
      (while (<= #2 N )
        ({ (= ([ a #2 )0 )(= #2 (+ #2 #1 ))))
      (= #1 (+ #1 1 ))
    (while (== ([ a #1 )0 )(= #1 (+ #1 1 )))))))

(to main 
  ({ (= N 1000 )
    (= a (array (+ N 1 )))
    (= ([ a 1 )0 )
    (for #1 2 N (= ([ a #1 )1 ))(} sieve )(} show ))))
