(defvar month-day-alist '((1 . 31)
(2 . 28)
(3 . 31)
(4 . 30)
(5 . 31)
(6 . 30)
(7 . 31)
(8 . 31)
(9 . 30)
(10 . 31)
(11 . 30)
(12 . 31)))
(defun assq-val (key alist)
(cdr (assq key alist)))
(defun next-month (year month day)
(let ((days (assq-val month month-day-alist)))
(if (eq month 2)
(if (or (eq (% year 400) 0)
(and (not (eq (% year 100) 0))
(eq (% year 4) 0)))
(setq days (1+ days)) ))
(if (eq month 12)
(progn
(setq year (1+ year))
(setq month 1) )
(setq month (1+ month)) )
(setq day (% (+ day days) 7))
(list year month day) ))
(let ((year-month-day '(1900 1 1)) (sum 0))
(while (not (eq (car year-month-day) 1901))
(setq year-month-day (apply #'next-month year-month-day)) )
(while (not (eq (car year-month-day) 2001))
(if (eq (nth 2 year-month-day) 0)
(setq sum (1+ sum)) )
(setq year-month-day (apply #'next-month year-month-day)) )
(princ sum)
(princ "\n") )