Commits

Yoshifumi YAMAGUCHI committed a223582

ported from mercurial repository

Comments (0)

Files changed (168)

+*~
+*.a
+*.o
+*.omc
+*.cmi
+*.cmo
+*.spot
+*.spit
+*.annot
+*.orig
+*.lock
+*.run
+*.opt
+.omakedb
+.DS_Store
+
+
+.PHONY: all install clean
+
+########################################################################
+# Subdirectories.
+# You may want to include some subdirectories in this project.
+# If so, define the subdirectory targets and uncomment this section.
+#
+
+# traverse the subdirs except $(dirs)
+Subdirs_except(dirs) =
+ #println(PWD: $(shell pwd))
+
+ # need to export since .SUBDIRS is evaluated in the global scope
+ export VISIT_SUBDIRS
+
+ sub_omakefiles = $(glob i, */OMakefile)
+ subdirs = $(sub_omakefiles.map $(dirname))
+
+ VISIT_SUBDIRS=$(set-diff $(subdirs), $(dirs))
+
+ # The rule
+ .SUBDIRS: $(VISIT_SUBDIRS)
+
+# traverse all the subdirs
+Subdirs() =
+ Subdirs_except($(array))
+
+Subdirs()
+
+# project dirs
+
+LIB = $(dir lib)
+TEST = $(dir test)
+
+#
+# Various options
+#
+OCAMLFLAGS    += -warn-error x
+# OCAMLCFLAGS   +=
+# OCAMLOPTFLAGS += -inline 10
+# OCAML_LINK_FLAGS +=
+# OCAML_BYTE_LINK_FLAGS +=
+# OCAML_NATIVE_LINK_FLAGS +=
+NATIVE_ENABLED = true
+BYTE_ENABLED = false
+USE_OCAMLFIND = true
+
+########################################################################
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this file, to deal in the File without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the File, and to permit persons to whom the
+# File is furnished to do so, subject to the following condition:
+#
+# THE FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE FILE OR
+# THE USE OR OTHER DEALINGS IN THE FILE.
+
+########################################################################
+# The standard OMakeroot file.
+# You will not normally need to modify this file.
+# By default, your changes should be placed in the
+# OMakefile in this directory.
+#
+# If you decide to modify this file, note that it uses exactly
+# the same syntax as the OMakefile.
+#
+
+#
+# Include the standard installed configuration files.
+# Any of these can be deleted if you are not using them,
+# but you probably want to keep the Common file.
+#
+#open build/C
+open build/OCaml
+#open build/LaTeX
+
+#
+# The command-line variables are defined *after* the
+# standard configuration has been loaded.
+#
+DefineCommandVars()
+
+#
+# Include the OMakefile in this directory.
+#
+.SUBDIRS: .
+FILES[] =
+   problem1
+
+PROGRAM = problem1
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))
+let rec multiples ret n =
+  match n with
+  | n when n < 3 -> ret
+  | n when (n mod 3) = 0 || (n mod 5) = 0 ->
+      multiples (n::ret) (n-1)
+  | _ -> multiples ret (n-1)
+;;
+
+print_int (List.fold_left (+) 0 (multiples [] 999));;
+FILES[] =
+   problem10
+
+PROGRAM = problem10
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem10/problem10.ml

+module A = struct
+  let limit = 2000000;;
+  
+  let numbers n limit =
+    let rec numbers ret = function
+      | n when n=limit -> List.rev (n::ret)
+      | n -> numbers (n::ret) (n+1)
+    in
+    numbers [] n
+  ;;
+
+  (** [l] must be acsending order *)
+  let sieve l =
+    let sift n l = List.filter (fun x -> (x mod n) <> 0) l in
+    let rec sieve ret l =
+      match ret, l with
+      | _, [] -> ret
+      | [], x::xs -> sieve [x] (sift x xs)
+      | r::rs, l when (r*r) > (List.hd (List.rev l)) -> 
+          (List.rev l) @ (r::rs)
+      | ret, x::xs -> sieve (x::ret) (sift x xs)
+    in
+    sieve [] l
+  ;;
+
+  let primes n limit =
+    let ns = numbers n limit in
+    sieve ns
+  ;;
+
+  let test () =
+    let result = List.fold_left (+) 0 (primes 2 limit) in
+    begin
+      Printf.printf "sum of primes below %d is %d\n" limit result;
+      ();
+    end
+  ;;
+end
+
+
+let () = A.test ();;
+FILES[] =
+   problem11
+
+PROGRAM = problem11
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem11/problem11.ml

+module A = struct
+  let grid =
+    [[08; 02; 22; 97; 38; 15; 00; 40; 00; 75; 04; 05; 07; 78; 52; 12; 50; 77; 91; 08];
+    [49; 49; 99; 40; 17; 81; 18; 57; 60; 87; 17; 40; 98; 43; 69; 48; 04; 56; 62; 00];
+    [81; 49; 31; 73; 55; 79; 14; 29; 93; 71; 40; 67; 53; 88; 30; 03; 49; 13; 36; 65];
+    [52; 70; 95; 23; 04; 60; 11; 42; 69; 24; 68; 56; 01; 32; 56; 71; 37; 02; 36; 91];
+    [22; 31; 16; 71; 51; 67; 63; 89; 41; 92; 36; 54; 22; 40; 40; 28; 66; 33; 13; 80];
+    [24; 47; 32; 60; 99; 03; 45; 02; 44; 75; 33; 53; 78; 36; 84; 20; 35; 17; 12; 50];
+    [32; 98; 81; 28; 64; 23; 67; 10; 26; 38; 40; 67; 59; 54; 70; 66; 18; 38; 64; 70];
+    [67; 26; 20; 68; 02; 62; 12; 20; 95; 63; 94; 39; 63; 08; 40; 91; 66; 49; 94; 21];
+    [24; 55; 58; 05; 66; 73; 99; 26; 97; 17; 78; 78; 96; 83; 14; 88; 34; 89; 63; 72];
+    [21; 36; 23; 09; 75; 00; 76; 44; 20; 45; 35; 14; 00; 61; 33; 97; 34; 31; 33; 95];
+    [78; 17; 53; 28; 22; 75; 31; 67; 15; 94; 03; 80; 04; 62; 16; 14; 09; 53; 56; 92];
+    [16; 39; 05; 42; 96; 35; 31; 47; 55; 58; 88; 24; 00; 17; 54; 24; 36; 29; 85; 57];
+    [86; 56; 00; 48; 35; 71; 89; 07; 05; 44; 44; 37; 44; 60; 21; 58; 51; 54; 17; 58];
+    [19; 80; 81; 68; 05; 94; 47; 69; 28; 73; 92; 13; 86; 52; 17; 77; 04; 89; 55; 40];
+    [04; 52; 08; 83; 97; 35; 99; 16; 07; 97; 57; 32; 16; 26; 26; 79; 33; 27; 98; 66];
+    [88; 36; 68; 87; 57; 62; 20; 72; 03; 46; 33; 67; 46; 55; 12; 32; 63; 93; 53; 69];
+    [04; 42; 16; 73; 38; 25; 39; 11; 24; 94; 72; 18; 08; 46; 29; 32; 40; 62; 76; 36];
+    [20; 69; 36; 41; 72; 30; 23; 88; 34; 62; 99; 69; 82; 67; 59; 85; 74; 04; 36; 16];
+    [20; 73; 35; 29; 78; 31; 90; 01; 74; 31; 49; 71; 48; 86; 81; 16; 23; 57; 05; 54];
+    [01; 70; 54; 71; 83; 51; 54; 69; 16; 92; 33; 48; 61; 43; 52; 01; 89; 19; 67; 48]];;
+
+  let width = 4;;
+
+  let max l =
+    let rec max r = function
+      | [] -> r
+      | x::xs -> if x > r then max x xs else max r xs
+    in
+    max 0 l
+  ;;
+
+
+  let max_row_prod grid width =
+    let splitNth n l =
+      let rec splitNth fst snd n =
+        match snd, n with
+        | [], _ -> (List.rev fst, [])
+        | _, 0 -> (List.rev fst, snd)
+        | x::xs, n -> (x::fst, xs)
+      in
+      splitNth [] l n
+    in
+    let takeN n l =
+      let rec takeN ret n l =
+        match n, l with
+        | 0, _ | _, [] -> List.rev (ret)
+        | _, x::xs -> takeN (x::ret) (n-1) xs
+      in
+      takeN [] n l
+    in
+    let rec row_prods ret row col =
+      match row, col with
+      | r, _ when r > ((List.length grid) - 1)-> ret
+      | r, c when (c+width) > (List.length (List.nth grid r)) ->
+          row_prods ret (r+1) 0
+      | r, c ->
+          let (_, tail) = splitNth c (List.nth grid r) in
+          let p = List.fold_left ( * ) 1 (takeN width tail) in
+          row_prods (p::ret) r (c+1)
+    in
+    max (row_prods [] 0 0)
+  ;;
+
+  let max_col_prod grid width =
+    let takeNcol n r c gd =
+      let rec takeNcol ret n r c =
+        match n, r, c with
+        | 0, _, _ -> ret
+        | _, r, c when (r+n) > ((List.length gd) - 1) -> []
+        | _, r, c when c > ((List.length (List.nth gd r)) - 1) -> []
+        | n, r, c ->
+            let v = List.nth (List.nth gd r) c in
+            takeNcol (v::ret) (n-1) (r+1) c
+      in
+      takeNcol [] n r c
+    in      
+    let rec col_prods ret row col =
+      match row, col with
+      | r, c when c > (List.length (List.nth grid r)) -> ret
+      | r, c when (r+width) > ((List.length grid) - 1) -> 
+          col_prods ret 0 (c+1)
+      | r, c ->
+          let p = List.fold_left ( * ) 1 (takeNcol width r c grid) in
+          col_prods (p::ret) (r+1) c
+    in
+    max (col_prods [] 0 0)
+  ;;
+
+  let max_rcross_prod grid width =
+    let takeNrcross n r c gd =
+      let rec takeNrcross ret n r c =
+        match n, r, c with
+        | 0, _, _ -> ret
+        | _, r, c when (r+n) > ((List.length gd) - 1) -> []
+        | _, r, c when (c+n) > ((List.length (List.nth gd r)) - 1) -> []
+        | n, r, c ->
+            let v = List.nth (List.nth gd r) c in
+            takeNrcross (v::ret) (n-1) (r+1) (c+1)
+      in
+      takeNrcross [] n r c
+    in
+    let rec rcross_prods ret row col =
+      match row, col with
+      | r, c when (c+width) > (List.length (List.nth grid r) - 1) -> ret
+      | r, c when (r+width) > ((List.length grid) - 1) ->
+          rcross_prods ret 0 (c+1)
+      | r, c ->
+          let p = List.fold_left ( * ) 1 (takeNrcross width r c grid) in
+          rcross_prods (p::ret) (r+1) c
+    in
+    max (rcross_prods [] 0 0)
+  ;;
+
+  let max_lcross_prod grid width=
+    let grid' = List.rev grid in
+    max_rcross_prod grid' width
+  ;;
+
+  let test () = 
+    begin
+      Printf.printf "max in row_prod is %d\n" (max_row_prod grid width);
+      Printf.printf "max in col_prod is %d\n" (max_col_prod grid width);
+      Printf.printf "max in rcross_prod is %d\n" (max_rcross_prod grid width);
+      Printf.printf "max in lcross_prod is %d\n" (max_lcross_prod grid width);
+    end
+  ;;
+
+end
+
+let () = A.test ();;
+FILES[] =
+   problem112
+
+PROGRAM = problem112
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem112/problem112.ml

+(**
+ *  Problem 112
+ *
+ *  Working from left-to-right if no digit is exceeded by the digit
+ *  to its left it is called an increasing number; for example, 134468.
+ *
+ *  Similarly if no digit is exceeded by the digit to its right
+ *  it is called a decreasing number; for example, 66420.
+ *
+ *  We shall call a positive integer that is neither increasing
+ *  nor decreasing a "bouncy" number; for example, 155349.
+ *
+ *  Clearly there cannot be any bouncy numbers below one-hundred,
+ *  but just over half of the numbers below one-thousand (525) are bouncy.
+ *  In fact, the least number for which the proportion of bouncy numbers
+ *  first reaches 50% is 538.
+ *
+ *  Surprisingly, bouncy numbers become more and more common
+ *  and by the time we reach 21780 the proportion of bouncy numbers is equal to 90%.
+ *
+ *  Find the least number for which the proportion of bouncy numbers is exactly 99%.
+ *)
+
+
+module A : sig
+
+  val is_directional : (int -> bool) -> int -> bool
+  val is_increasing : int -> bool
+  val is_decreasing : int -> bool
+
+  val test : unit -> unit
+
+end = struct
+
+  let threshold = 0.99
+
+  let is_directional f n = 
+    let strn = string_of_int n in
+    let len = String.length strn in
+    let subs = ref [] in
+    let () = 
+      for i = 0 to len - 2 do
+        let s = (int_of_char strn.[i+1]) - (int_of_char strn.[i]) in
+        subs := s::!subs
+      done
+    in
+    List.for_all f !subs
+  ;;
+
+  let is_increasing = function 
+    | n when n < 10 -> true
+    | n -> is_directional (fun x -> x >= 0) n
+  ;;
+
+  let is_decreasing = function
+    | n when n < 10 -> true
+    | n -> is_directional (fun x -> x <= 0) n
+  ;;
+
+  let solver threshold = 
+    let rec solver accu cur =
+      match accu, cur with
+      | accu, cur when (float_of_int accu) /. (float_of_int (cur - 1)) >= threshold ->
+          cur - 1
+      | _, cur when (is_increasing cur) || (is_decreasing cur) ->
+          solver accu (succ cur)
+      | _, cur ->
+          solver (succ accu) (succ cur)
+    in
+    solver 0 1
+  ;;
+
+  let test () =
+    begin
+      Printf.printf "%b\n%!" (is_increasing 123456);
+      Printf.printf "%b\n%!" (is_increasing 654321);
+      Printf.printf "%b\n%!" (is_decreasing 654321);
+      Printf.printf "%b\n%!" (is_decreasing 123456);
+      Printf.printf "%d\n%!" (solver 0.5);
+      Printf.printf "%d\n%!" (solver 0.9);
+      Printf.printf "%d\n%!" (solver threshold);
+    end
+  
+end
+
+
+let _ = A.test ()
+FILES[] =
+   problem12
+
+PROGRAM = problem12
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem12/problem12.ml

+module A = struct 
+
+  let limit = 100000;;
+  
+  let numbers n = 
+    let rec numbers ret = function
+      | 0 -> ret
+      | n -> numbers (n::ret) (n-1)
+    in
+    numbers [] n
+  ;;
+  
+  let nth_triangle n = List.fold_left (+) 0 (numbers n);;
+
+  let primes n =
+    let sift n l = List.filter (fun x -> (x mod n) <> 0) l in
+    let rec sieve ret l = 
+      match ret, l with
+      | _, [] -> ret
+      | [], x::xs -> sieve [x] (sift x xs)
+      | r::rs, l when (r*r) > (List.hd (List.rev l)) 
+          -> (List.rev (r::rs)) @ l
+      | ret, x::xs -> sieve (x::ret) (sift x xs)
+    in
+    sieve [] (List.tl (numbers n))
+  ;;
+
+  let primes_n = primes limit;;
+
+  let count_factors n =
+    let rec count ret c n ps =
+      match n, ps with
+      | _, [] | 1, _ -> (1::ret)
+      | n, p::ps ->
+          if (n mod p) = 0 then count ret (c+1) (n/p) (p::ps)
+          else count (c::ret) 0 n ps
+    in
+    count [] 0 n primes_n
+  ;;
+
+  let num_factors n =
+    List.fold_left ( * ) 1 (List.map (fun x -> x+1) (count_factors n))
+  ;;
+
+  let find_factors_over n =
+    let rec finder t =
+      let tri = nth_triangle t in
+      if n <= (num_factors tri) then tri
+      else finder (t+1)
+    in
+    finder 1
+  ;;
+
+  let test () =
+    begin
+      Printf.printf "%d\n" (List.length primes_n);
+      Printf.printf "%d\n" (find_factors_over 500);
+    end
+  ;;
+
+end
+
+let () = A.test ();;
+
+    
+FILES[] =
+   problem13
+
+PROGRAM = problem13
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem13/problem13.ml

+module A = struct
+
+  open Big_int
+
+  let data = [
+    "37107287533902102798797998220837590246510135740250";
+    "46376937677490009712648124896970078050417018260538";
+    "74324986199524741059474233309513058123726617309629";
+    "91942213363574161572522430563301811072406154908250";
+    "23067588207539346171171980310421047513778063246676";
+    "89261670696623633820136378418383684178734361726757";
+    "28112879812849979408065481931592621691275889832738";
+    "44274228917432520321923589422876796487670272189318";
+    "47451445736001306439091167216856844588711603153276";
+    "70386486105843025439939619828917593665686757934951";
+    "62176457141856560629502157223196586755079324193331";
+    "64906352462741904929101432445813822663347944758178";
+    "92575867718337217661963751590579239728245598838407";
+    "58203565325359399008402633568948830189458628227828";
+    "80181199384826282014278194139940567587151170094390";
+    "35398664372827112653829987240784473053190104293586";
+    "86515506006295864861532075273371959191420517255829";
+    "71693888707715466499115593487603532921714970056938";
+    "54370070576826684624621495650076471787294438377604";
+    "53282654108756828443191190634694037855217779295145";
+    "36123272525000296071075082563815656710885258350721";
+    "45876576172410976447339110607218265236877223636045";
+    "17423706905851860660448207621209813287860733969412";
+    "81142660418086830619328460811191061556940512689692";
+    "51934325451728388641918047049293215058642563049483";
+    "62467221648435076201727918039944693004732956340691";
+    "15732444386908125794514089057706229429197107928209";
+    "55037687525678773091862540744969844508330393682126";
+    "18336384825330154686196124348767681297534375946515";
+    "80386287592878490201521685554828717201219257766954";
+    "78182833757993103614740356856449095527097864797581";
+    "16726320100436897842553539920931837441497806860984";
+    "48403098129077791799088218795327364475675590848030";
+    "87086987551392711854517078544161852424320693150332";
+    "59959406895756536782107074926966537676326235447210";
+    "69793950679652694742597709739166693763042633987085";
+    "41052684708299085211399427365734116182760315001271";
+    "65378607361501080857009149939512557028198746004375";
+    "35829035317434717326932123578154982629742552737307";
+    "94953759765105305946966067683156574377167401875275";
+    "88902802571733229619176668713819931811048770190271";
+    "25267680276078003013678680992525463401061632866526";
+    "36270218540497705585629946580636237993140746255962";
+    "24074486908231174977792365466257246923322810917141";
+    "91430288197103288597806669760892938638285025333403";
+    "34413065578016127815921815005561868836468420090470";
+    "23053081172816430487623791969842487255036638784583";
+    "11487696932154902810424020138335124462181441773470";
+    "63783299490636259666498587618221225225512486764533";
+    "67720186971698544312419572409913959008952310058822";
+    "95548255300263520781532296796249481641953868218774";
+    "76085327132285723110424803456124867697064507995236";
+    "37774242535411291684276865538926205024910326572967";
+    "23701913275725675285653248258265463092207058596522";
+    "29798860272258331913126375147341994889534765745501";
+    "18495701454879288984856827726077713721403798879715";
+    "38298203783031473527721580348144513491373226651381";
+    "34829543829199918180278916522431027392251122869539";
+    "40957953066405232632538044100059654939159879593635";
+    "29746152185502371307642255121183693803580388584903";
+    "41698116222072977186158236678424689157993532961922";
+    "62467957194401269043877107275048102390895523597457";
+    "23189706772547915061505504953922979530901129967519";
+    "86188088225875314529584099251203829009407770775672";
+    "11306739708304724483816533873502340845647058077308";
+    "82959174767140363198008187129011875491310547126581";
+    "97623331044818386269515456334926366572897563400500";
+    "42846280183517070527831839425882145521227251250327";
+    "55121603546981200581762165212827652751691296897789";
+    "32238195734329339946437501907836945765883352399886";
+    "75506164965184775180738168837861091527357929701337";
+    "62177842752192623401942399639168044983993173312731";
+    "32924185707147349566916674687634660915035914677504";
+    "99518671430235219628894890102423325116913619626622";
+    "73267460800591547471830798392868535206946944540724";
+    "76841822524674417161514036427982273348055556214818";
+    "97142617910342598647204516893989422179826088076852";
+    "87783646182799346313767754307809363333018982642090";
+    "10848802521674670883215120185883543223812876952786";
+    "71329612474782464538636993009049310363619763878039";
+    "62184073572399794223406235393808339651327408011116";
+    "66627891981488087797941876876144230030984490851411";
+    "60661826293682836764744779239180335110989069790714";
+    "85786944089552990653640447425576083659976645795096";
+    "66024396409905389607120198219976047599490197230297";
+    "64913982680032973156037120041377903785566085089252";
+    "16730939319872750275468906903707539413042652315011";
+    "94809377245048795150954100921645863754710598436791";
+    "78639167021187492431995700641917969777599028300699";
+    "15368713711936614952811305876380278410754449733078";
+    "40789923115535562561142322423255033685442488917353";
+    "44889911501440648020369068063960672322193204149535";
+    "41503128880339536053299340368006977710650566631954";
+    "81234880673210146739058568557934581403627822703280";
+    "82616570773948327592232845941706525094512325230608";
+    "22918802058777319719839450180888072429661980811197";
+    "77158542502016545090413245809786882778948721859617";
+    "72107838435069186155435662884062257473692284509516";
+    "20849603980134001723930671666823555245252804609722";
+    "53503534226472524250874054075591789781264330331690";
+  ];;
+
+  let (-) = minus_big_int;;
+  let (+) = add_big_int;;
+  let ( * ) = mult_big_int;;
+  let (/) = div_big_int;;
+  let (mod) = mod_big_int;;
+
+  
+  let test () =
+    let numbers = List.map (fun x -> big_int_of_string x) data in
+    let sum = List.fold_left (+) zero_big_int numbers in
+    Printf.printf "%s\n" (string_of_big_int sum)
+  ;;
+
+end
+
+
+let () = A.test ();;
+FILES[] =
+   problem14
+
+PROGRAM = problem14
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem14/problem14.ml

+module A = struct
+  let func n = 
+    let rec func c = function
+      | 1 -> c
+      | n when (n mod 2) = 0 -> func (c+1) (n/2)
+      | n -> func (c+1) (3*n+1)
+    in
+    func 0 n
+  ;;
+  
+  let max_seq_under n =
+    let rec max_seq nth v = function
+      | t when t > n -> nth
+      | t -> 
+          if v < (func t) then max_seq t (func t) (t+1)
+          else max_seq nth v (t+1)
+    in
+    max_seq 0 0 1
+  ;;
+    
+  let test () =
+    Printf.printf "%d\n" (max_seq_under 1000000)
+  ;;
+end
+
+let () = A.test ();;
+FILES[] =
+   problem15
+
+PROGRAM = problem15
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem15/problem15.ml

+module A = struct
+
+  open Big_int
+
+  let (-) = minus_big_int;;
+  let (+) = add_big_int;;
+  let ( * ) = mult_big_int;;
+  let (/) = div_big_int;;
+  let (mod) = mod_big_int;;
+  
+  let fact' m n =
+    let rec fact' ret x y = 
+      if eq_big_int y zero_big_int then ret
+      else fact' (x * ret) (pred_big_int x) (pred_big_int y)
+    in
+    fact' unit_big_int m n
+  ;;
+      
+  let combination l r = (fact' l r) / (fact' r r);;
+
+  let test () = 
+    let forty = big_int_of_int 40 and
+        twenty = big_int_of_int 20 in
+    begin
+      Printf.printf "%s\n" (string_of_big_int (fact' forty twenty));
+      Printf.printf "%s\n" (string_of_big_int (fact' twenty twenty));
+      Printf.printf "%s\n" (string_of_big_int (combination forty twenty));
+    end
+  ;;
+
+end
+
+let () = A.test ();;
+FILES[] =
+   problem16
+
+PROGRAM = problem16
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem16/problem16.ml

+module A = struct
+  
+  open Big_int
+
+  let square x = mult_big_int x x;;
+  let is_even x = eq_big_int (mod_big_int x (big_int_of_int 2)) zero_big_int;;
+  let half_of x = div_big_int x (big_int_of_int 2);;
+
+  let rec pow x n =
+    match n with
+    | n when eq_big_int n zero_big_int -> unit_big_int
+    | n when eq_big_int n unit_big_int -> x
+    | n when is_even n -> pow (square x) (half_of n)
+    | n -> mult_big_int x (pow (square x) (half_of n))
+  ;;
+
+  let takeN str n =
+    let rec takeN ret = function
+      | 0 -> (str.[0] :: ret)
+      | n -> takeN (str.[n] :: ret) (n-1)
+    in
+    takeN [] (n-1)
+  ;;
+
+  let clist_of_string str =
+    let len = String.length str in
+    takeN str len
+  ;;
+
+  let test () = 
+    let czero = int_of_char '0' in
+    let numbers = List.map (fun c -> (int_of_char c) - czero) in
+    let str = string_of_big_int (pow (big_int_of_int 2) (big_int_of_int 1000)) in
+    begin
+      Printf.printf "%s\n" (string_of_big_int (pow (big_int_of_int 2) (big_int_of_int 5)));
+      Printf.printf "%s\n" str;
+      Printf.printf "%d\n" (List.fold_left (+) 0 (numbers (clist_of_string str)));
+    end
+  ;;
+end
+
+
+let () = A.test ();;
+FILES[] =
+   problem17
+
+PROGRAM = problem17
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem17/problem17.ml

+module A = struct
+  
+  let singles = [
+    (1, "one"); (2, "two"); (3, "three"); (4, "four"); (5, "five");
+    (6, "six"); (7, "seven"); (8, "eight"); (9, "nine");
+  ];;
+
+  let teens = [
+    (10, "ten"); (11, "eleven"); (12, "twelve"); (13, "thirteen");
+    (14, "fourteen"); (15, "fifteen"); (16, "sixteen");
+    (17, "seventeen"); (18, "eighteen"); (19, "nineteen");
+  ];;
+
+  let ties = [
+    (20, "twenty"); (30, "thirty"); (40, "forty"); (50, "fifty");
+    (60, "sixty"); (70, "seventy"); (80, "eighty"); (90, "ninety");
+  ];;
+  
+  let find_single n =
+    let rec find_single n = function
+      | [] -> ""
+      | (n', w') :: xs -> if n = n' then w' else find_single n xs
+    in
+    find_single n singles
+  ;;
+
+  let find_double n = 
+    let rec find_ties n = function
+      | [] -> ""
+      | (n', w') :: xs ->
+          if (n / n') = 1 && (n mod n') < 10 then w' ^ (find_single (n mod n'))
+          else find_ties n xs
+    in
+    let rec find_teens n = function
+      | [] -> ""
+      | (n', w') :: xs -> if n = n' then w' else find_teens n xs
+    in
+    match n with
+    | n when n >= 20 -> find_ties n ties
+    | n when n >= 10 -> find_teens n teens
+    | _ -> find_single n
+  ;;
+
+  let find_larges n =
+    if n = 1000 then "onethousand"
+    else (find_single (n / 100)) ^ "hundred"
+
+  let mkword = function
+    | n when n >= 100 -> 
+        if (n mod 100) = 0 then find_larges n
+        else (find_larges n)  ^ "and" ^ (find_double (n mod 100))
+    | n when n < 100 -> find_double n
+    | _ -> ""
+  ;;
+
+  let mkwordlist numbers =
+    let rec mkwordlist ret = function
+      | [] -> ret
+      | x::xs -> mkwordlist ((mkword x)::ret) xs
+    in
+    mkwordlist [] numbers
+  ;;
+
+  let numbers n =
+    let rec numbers ret = function
+      | 0 -> ret
+      | n -> numbers (n::ret) (n-1)
+    in
+    numbers [] n
+  ;;
+  
+  let test () =
+    begin
+      let list = mkwordlist (numbers 1000) in
+      let wordlengths = List.map (fun w -> String.length w) list in
+      Printf.printf "%d\n" (List.fold_left (+) 0 wordlengths);
+      ();
+    end
+  ;;
+
+end
+
+let () = A.test ();;
+FILES[] =
+   problem18
+
+PROGRAM = problem18
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += str
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem18/problem18.ml

+module A : sig
+  
+  val filename : string
+
+  val split_to_num : string -> int list
+
+  val load_triangle : string -> int list list
+
+  val test : unit -> unit
+
+end = struct
+
+  let filename = "triangle.txt"
+
+  let split_to_num line = 
+    let items = Str.split (Str.regexp "[ \t]") line in
+    List.map (fun x -> int_of_string x) items
+  ;;
+
+  let load_triangle filename = 
+    let cin = open_in filename in
+    let triangle = ref [] in
+    try
+      while true; 
+      do
+        let line = input_line cin in
+        triangle := (split_to_num line) :: !triangle
+      done; []
+    with
+      End_of_file ->
+        close_in cin;
+        List.rev !triangle
+  ;;
+
+  let traverse_all_path triangle =
+    let add list1 list2 = List.map2 (fun x y -> x+y) list1 list2 in
+    let merge upper lower =
+      let lalign = add (0::upper) lower
+      and ralign = add (List.rev (0::(List.rev upper))) lower
+      in
+      List.map2 (fun x y -> if x > y then x else y) lalign ralign
+    in
+    let rec succ_step = function
+      | x::[] -> x
+      | x1::x2::xs -> succ_step ((merge x1 x2)::xs)
+      | [] -> failwith "succ_step"
+    in
+    succ_step triangle
+  ;;
+
+  let max list = 
+    let rec max curr = function
+      | [] -> curr
+      | x::xs -> if x > curr then max x xs else max curr xs
+    in
+    max 0 list
+  ;;
+      
+  let solver filename = 
+    let triangle = load_triangle filename in
+    let list_str list = List.fold_left (fun x y -> x ^ string_of_int y ^ " ") "" list in
+    let last_line = traverse_all_path triangle in
+    let _ = Printf.printf "%s\n" (list_str last_line) in
+    let _ = Printf.printf "%d\n" (max last_line) in
+    ()
+  ;;
+
+  let test () = solver filename;;
+
+end
+
+
+let _ = A.test ()

Problem18/triangle.txt

+75
+95 64
+17 47 82
+18 35 87 10
+20 04 82 47 65
+19 01 23 75 03 34
+88 02 77 73 07 63 67
+99 65 04 28 06 16 70 92
+41 41 26 56 83 40 80 70 33
+41 48 72 33 47 32 37 16 94 29
+53 71 44 65 25 43 91 52 97 51 14
+70 11 33 28 77 73 17 78 39 68 17 57
+91 71 52 38 17 14 91 43 58 50 27 29 48
+63 66 04 68 89 53 67 30 73 16 69 87 40 31
+04 62 98 27 23 09 70 98 73 93 38 53 60 04 23

Problem18/triangle_small.txt

+3
+7 4
+2 4 6
+8 5 9 3
+FILES[] =
+   problem19
+
+PROGRAM = problem19
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem19/problem19.ml

+(** -*- coding: utf-8 -*- *)
+(**
+Problem 19
+
+You are given the following information, 
+but you may prefer to do some research for yourself.
+
+    * 1 Jan 1900 was a Monday.
+    * Thirty days has September,
+      April, June and November.
+      All the rest have thirty-one,
+      Saving February alone,
+      Which has twenty-eight, rain or shine.
+      And on leap years, twenty-nine.
+    * A leap year occurs on any year evenly divisible by 4, 
+      but not on a century unless it is divisible by 400.
+
+How many Sundays fell on the first of the month during the twentieth century 
+(1 Jan 1901 to 31 Dec 2000)?
+*)
+
+
+module A : sig
+
+  val is_leap : int -> bool
+
+  val days_of_year : int -> int
+
+  val days_of_mon : int -> int -> int
+
+  val from_1900_1 : int -> int -> int
+
+  val is_sunday : int -> int -> bool
+
+  val test : unit -> unit
+
+end = struct
+       
+  let is_leap = function
+    | y when y mod 4 = 0 ->
+        if y mod 400 = 0 then true
+        else 
+          if y mod 100 <> 0 then true
+          else false
+    | _ -> false
+  ;;
+
+
+  let days_of_year = function
+    | year when is_leap year -> 366
+    | _ -> 365
+  ;;
+
+
+  let days_of_mon year mon =
+    match year, mon with
+    | _, m when (List.mem m [1;3;5;7;8;10;12]) -> 31
+    | _, m when (List.mem m [4;6;9;11]) -> 30
+    | y, 2 when is_leap y -> 29
+    | _, 2 -> 28
+    | _, _ -> failwith("days_of_mon")
+  ;;
+
+
+  let from_1900_1 year mon = 
+    let rec from_1st_day_of_year accu year mon =
+      match mon with
+      | 1 -> accu
+      | m when m < 13 -> 
+          from_1st_day_of_year ((days_of_mon year (m-1))+accu) year (m-1)
+      | _ -> failwith("from_1900_1")
+    in
+    let rec from_1900_to accu = function
+      | 1900 -> accu
+      | y when y > 1900 -> from_1900_to ((days_of_year (y-1))+accu) (y-1)
+      | _ -> failwith("from_1900_to")
+    in
+    (from_1900_to 0 year) + (from_1st_day_of_year 0 year mon)
+  ;;
+
+
+  let is_sunday year mon =
+    if (from_1900_1 year mon) mod 7 = 6 then true else false
+  ;;
+  
+
+  let solver () =
+    let rec solver accu year mon =
+      match year, mon with
+      | 2001, _ -> accu
+      | _, 13 -> solver accu (year+1) 1
+      | y, m -> 
+          if is_sunday y m then solver (accu+1) y (m+1)
+          else solver accu y (m+1)
+    in
+    solver 0 1901 1
+  ;;
+    
+  let test () = 
+    let _ = print_endline (string_of_bool (is_leap 400)) in
+    let _ = print_endline (string_of_int (days_of_year 2000)) in
+    let _ = print_endline (string_of_int (days_of_mon 1901 2)) in
+    let _ = print_endline (string_of_int (from_1900_1 1901 2)) in
+    let _ = print_endline (string_of_int (solver ())) in
+    ()
+  ;;
+
+end
+
+let _ = A.test ()
+FILES[] =
+   problem2
+
+PROGRAM = problem2
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))
+let fib_below n =
+  let rec fib' ret c p = function
+    | 1 -> ret
+    | n -> 
+        if p > n then ret
+        else fib' (p::ret) (c+p) c (n-1)
+  in 
+  fib' [] 2 1 n
+;;
+
+let evens_below n = List.filter (fun n -> n mod 2 = 0) (fib_below n);;
+
+print_int (List.fold_left (+) 0 (evens_below 4000000));;
+
+
+
+
+
+FILES[] =
+   problem20
+
+PROGRAM = problem20
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem20/problem20.ml

+module A = struct
+
+  open Big_int
+
+  let fact n =
+    let rec fact ret = function
+      | n when eq_big_int n zero_big_int -> ret
+      | n -> fact (mult_big_int n ret) (pred_big_int n)
+    in
+    fact unit_big_int n
+  ;;
+
+  let sum_all_digits n =
+    let zero = int_of_char '0' in
+    let str = string_of_big_int n in
+    let rec sum ret = function
+      | 0 -> ((int_of_char str.[0]) - zero) + ret
+      | i -> sum (((int_of_char str.[i]) - zero) + ret) (i-1)
+    in
+    sum 0 (String.length str - 1)
+  ;;
+
+  let test () =
+    Printf.printf "%d\n" (sum_all_digits (fact (big_int_of_int 100)))
+  ;;
+
+end
+
+let () = A.test ();;
+FILES[] =
+   problem206
+
+PROGRAM = problem206
+OCAMLINCLUDES += $(LIB)
+OCAML_LIBS[] += 
+	$(LIB)/eular
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+OCAMLFLAGS += -warn-error x
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem206/problem206.ml

+(**
+ * Problem 206
+ *
+ * Find the unique positive integer whose square has the form 1_2_3_4_5_6_7_8_9_0,
+ * where each “_” is a single digit.
+ *)
+
+(**
+ * Speculation
+ *
+ * from 1 to 9, there's no digit whose square ends with zero then 
+ * the answer must be end with '0'. Thus, squqre of the answer
+ * end with '00' and therefore tenth digit of the answer
+ * must be '3' or '7', because from 1 to 9, those are the only digit whose
+ * squares end with '9'.
+ *
+ * 1_2_3_4_5_6_7_8_9_0 is 19 digits number and square root of 2*10^18 is
+ * almost 1414213562, which must be muximum number of candidates and 
+ * 10^9 is minimum.
+ *)
+
+module A = struct
+
+  open Big_int
+
+  let (+~) = add_big_int
+  let (-~) = sub_big_int
+  let ( *~ ) = mult_big_int
+  let (/~) = div_big_int
+
+  let maximum = big_int_of_int 1414213562
+  and minimum = power_int_positive_int 10 9
+
+  let threshold = power_int_positive_int 10 18
+
+  let pattern = "1234567890"
+
+  let rec solver n =
+    let verifier s =
+      if lt_big_int s threshold then false 
+      else
+        let strs = string_of_big_int s in
+        let len = (String.length strs) / 2 in
+        let ret = String.create (len+1) in
+        for i = 0 to len do
+          ret.[i] <- strs.[2*i]
+        done;        
+        if ret = pattern then true else false
+    in
+    if verifier (square_big_int n) then n
+    else 
+      if gt_big_int n maximum then zero_big_int
+      else
+        solver (succ_big_int n)
+  ;;
+    
+  let test () = 
+    Printf.printf "%s\n%!" (string_of_big_int minimum);
+    Printf.printf "%s\n%!" (string_of_big_int maximum);
+    Printf.printf "%s\n%!" (string_of_big_int threshold);
+    Printf.printf "%s\n%!" (string_of_big_int (solver minimum))
+  ;;
+
+end
+
+let _ = A.test ()
+FILES[] =
+   problem21
+
+PROGRAM = problem21
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem21/problem21.ml

+module A = struct
+
+  let limit = 10000;;
+
+  let numbers n =
+    let rec numbers ret = function
+      | 0 -> ret
+      | n -> numbers (n::ret) (n-1)
+    in
+    numbers [] n
+  ;;
+
+  let primes n =
+    let sift n l = List.filter (fun x -> (x mod n) <> 0) l in
+    let rec sieve ret l =
+      match ret, l with
+      | _, [] -> ret
+      | [], x::xs -> sieve [x] (sift x xs)
+      | r::rs, xs when (r*r) > (List.hd (List.rev xs)) ->
+          List.rev_append (r::rs) xs
+      | ret, x::xs ->
+          sieve (x::ret) (sift x xs)
+    in
+    sieve [] (List.tl (numbers n))
+  ;;
+
+  let pow_int x n = int_of_float ((float_of_int x) ** (float_of_int n));;
+          
+  let dividors ps n =
+    let rec n_div ret d x =
+      if (x mod d) = 0 then n_div (List.map (fun x -> x+1) (0::ret)) d (x/d)
+      else (x, List.map (fun n -> pow_int d n) (0::ret))
+    in
+    let rec div_list ret ps n =
+      match ps, n with
+      | [], _ | _, 0 | _, 1 -> ret
+      | p::ps, n ->
+          let (rest, divs) = n_div [] p n in
+          div_list (divs::ret) ps rest
+    in
+    div_list [] ps n
+  ;;
+
+  let rec prod_divs divs =
+    let rec cross_divs ret xs1 xs2 =
+      match xs1 with
+      | [] -> ret
+      | x::xs -> cross_divs ((List.map (fun n -> n*x) xs2) @ ret) xs xs2
+    in
+    match divs with
+    | [] -> [1]
+    | [ds] -> List.tl (List.sort (fun x y -> y - x) ds)
+    | ds1::ds2::dss -> prod_divs ((cross_divs [] ds1 ds2)::dss)
+  ;;
+
+  let print_list l = List.map (fun x -> Printf.printf "%d " x) l;;
+
+  
+
+  let rec find_amicable ret nums =
+    let sum_ds n = List.fold_left (+) 0 (prod_divs (dividors (primes limit) n)) in
+    match nums with
+    | [] -> ret
+    | n::ns ->
+        let sum = sum_ds n in
+        if sum_ds sum = n && sum <> n
+        then find_amicable (n::ret) (List.filter (fun x -> x <> n) ns)
+        else find_amicable ret ns
+  ;;
+
+  let test () = 
+    begin
+      (* print_list (List.flatten (dividors (primes 1000) 220)); *)
+      print_list (find_amicable [] (numbers limit));
+      Printf.printf "\n";
+      Printf.printf "%d\n" (List.fold_left (+) 0 (find_amicable [] (numbers limit)));
+      ();
+    end
+
+end
+
+let () = A.test ();;
+FILES[] =
+   problem22
+
+PROGRAM = problem22
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+OCAML_OTHER_LIBS += nums
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))
+"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE","CAROLYN","CHRISTINE","MARIE","JANET","CATHERINE","FRANCES","ANN","JOYCE","DIANE","ALICE","JULIE","HEATHER","TERESA","DORIS","GLORIA","EVELYN","JEAN","CHERYL","MILDRED","KATHERINE","JOAN","ASHLEY","JUDITH","ROSE","JANICE","KELLY","NICOLE","JUDY","CHRISTINA","KATHY","THERESA","BEVERLY","DENISE","TAMMY","IRENE","JANE","LORI","RACHEL","MARILYN","ANDREA","KATHRYN","LOUISE","SARA","ANNE","JACQUELINE","WANDA","BONNIE","JULIA","RUBY","LOIS","TINA","PHYLLIS","NORMA","PAULA","DIANA","ANNIE","LILLIAN","EMILY","ROBIN","PEGGY","CRYSTAL","GLADYS","RITA","DAWN","CONNIE","FLORENCE","TRACY","EDNA","TIFFANY","CARMEN","ROSA","CINDY","GRACE","WENDY","VICTORIA","EDITH","KIM","SHERRY","SYLVIA","JOSEPHINE","THELMA","SHANNON","SHEILA","ETHEL","ELLEN","ELAINE","MARJORIE","CARRIE","CHARLOTTE","MONICA","ESTHER","PAULINE","EMMA","JUANITA","ANITA","RHONDA","HAZEL","AMBER","EVA","DEBBIE","APRIL","LESLIE","CLARA","LUCILLE","JAMIE","JOANNE","ELEANOR","VALERIE","DANIELLE","MEGAN","ALICIA","SUZANNE","MICHELE","GAIL","BERTHA","DARLENE","VERONICA","JILL","ERIN","GERALDINE","LAUREN","CATHY","JOANN","LORRAINE","LYNN","SALLY","REGINA","ERICA","BEATRICE","DOLORES","BERNICE","AUDREY","YVONNE","ANNETTE","JUNE","SAMANTHA","MARION","DANA","STACY","ANA","RENEE","IDA","VIVIAN","ROBERTA","HOLLY","BRITTANY","MELANIE","LORETTA","YOLANDA","JEANETTE","LAURIE","KATIE","KRISTEN","VANESSA","ALMA","SUE","ELSIE","BETH","JEANNE","VICKI","CARLA","TARA","ROSEMARY","EILEEN","TERRI","GERTRUDE","LUCY","TONYA","ELLA","STACEY","WILMA","GINA","KRISTIN","JESSIE","NATALIE","AGNES","VERA","WILLIE","CHARLENE","BESSIE","DELORES","MELINDA","PEARL","ARLENE","MAUREEN","COLLEEN","ALLISON","TAMARA","JOY","GEORGIA","CONSTANCE","LILLIE","CLAUDIA","JACKIE","MARCIA","TANYA","NELLIE","MINNIE","MARLENE","HEIDI","GLENDA","LYDIA","VIOLA","COURTNEY","MARIAN","STELLA","CAROLINE","DORA","JO","VICKIE","MATTIE","TERRY","MAXINE","IRMA","MABEL","MARSHA","MYRTLE","LENA","CHRISTY","DEANNA","PATSY","HILDA","GWENDOLYN","JENNIE","NORA","MARGIE","NINA","CASSANDRA","LEAH","PENNY","KAY","PRISCILLA","NAOMI","CAROLE","BRANDY","OLGA","BILLIE","DIANNE","TRACEY","LEONA","JENNY","FELICIA","SONIA","MIRIAM","VELMA","BECKY","BOBBIE","VIOLET","KRISTINA","TONI","MISTY","MAE","SHELLY","DAISY","RAMONA","SHERRI","ERIKA","KATRINA","CLAIRE","LINDSEY","LINDSAY","GENEVA","GUADALUPE","BELINDA","MARGARITA","SHERYL","CORA","FAYE","ADA","NATASHA","SABRINA","ISABEL","MARGUERITE","HATTIE","HARRIET","MOLLY","CECILIA","KRISTI","BRANDI","BLANCHE","SANDY","ROSIE","JOANNA","IRIS","EUNICE","ANGIE","INEZ","LYNDA","MADELINE","AMELIA","ALBERTA","GENEVIEVE","MONIQUE","JODI","JANIE","MAGGIE","KAYLA","SONYA","JAN","LEE","KRISTINE","CANDACE","FANNIE","MARYANN","OPAL","ALISON","YVETTE","MELODY","LUZ","SUSIE","OLIVIA","FLORA","SHELLEY","KRISTY","MAMIE","LULA","LOLA","VERNA","BEULAH","ANTOINETTE","CANDICE","JUANA","JEANNETTE","PAM","KELLI","HANNAH","WHITNEY","BRIDGET","KARLA","CELIA","LATOYA","PATTY","SHELIA","GAYLE","DELLA","VICKY","LYNNE","SHERI","MARIANNE","KARA","JACQUELYN","ERMA","BLANCA","MYRA","LETICIA","PAT","KRISTA","ROXANNE","ANGELICA","JOHNNIE","ROBYN","FRANCIS","ADRIENNE","ROSALIE","ALEXANDRA","BROOKE","BETHANY","SADIE","BERNADETTE","TRACI","JODY","KENDRA","JASMINE","NICHOLE","RACHAEL","CHELSEA","MABLE","ERNESTINE","MURIEL","MARCELLA","ELENA","KRYSTAL","ANGELINA","NADINE","KARI","ESTELLE","DIANNA","PAULETTE","LORA","MONA","DOREEN","ROSEMARIE","ANGEL","DESIREE","ANTONIA","HOPE","GINGER","JANIS","BETSY","CHRISTIE","FREDA","MERCEDES","MEREDITH","LYNETTE","TERI","CRISTINA","EULA","LEIGH","MEGHAN","SOPHIA","ELOISE","ROCHELLE","GRETCHEN","CECELIA","RAQUEL","HENRIETTA","ALYSSA","JANA","KELLEY","GWEN","KERRY","JENNA","TRICIA","LAVERNE","OLIVE","ALEXIS","TASHA","SILVIA","ELVIRA","CASEY","DELIA","SOPHIE","KATE","PATTI","LORENA","KELLIE","SONJA","LILA","LANA","DARLA","MAY","MINDY","ESSIE","MANDY","LORENE","ELSA","JOSEFINA","JEANNIE","MIRANDA","DIXIE","LUCIA","MARTA","FAITH","LELA","JOHANNA","SHARI","CAMILLE","TAMI","SHAWNA","ELISA","EBONY","MELBA","ORA","NETTIE","TABITHA","OLLIE","JAIME","WINIFRED","KRISTIE","MARINA","ALISHA","AIMEE","RENA","MYRNA","MARLA","TAMMIE","LATASHA","BONITA","PATRICE","RONDA","SHERRIE","ADDIE","FRANCINE","DELORIS","STACIE","ADRIANA","CHERI","SHELBY","ABIGAIL","CELESTE","JEWEL","CARA","ADELE","REBEKAH","LUCINDA","DORTHY","CHRIS","EFFIE","TRINA","REBA","SHAWN","SALLIE","AURORA","LENORA","ETTA","LOTTIE","KERRI","TRISHA","NIKKI","ESTELLA","FRANCISCA","JOSIE","TRACIE","MARISSA","KARIN","BRITTNEY","JANELLE","LOURDES","LAUREL","HELENE","FERN","ELVA","CORINNE","KELSEY","INA","BETTIE","ELISABETH","AIDA","CAITLIN","INGRID","IVA","EUGENIA","CHRISTA","GOLDIE","CASSIE","MAUDE","JENIFER","THERESE","FRANKIE","DENA","LORNA","JANETTE","LATONYA","CANDY","MORGAN","CONSUELO","TAMIKA","ROSETTA","DEBORA","CHERIE","POLLY","DINA","JEWELL","FAY","JILLIAN","DOROTHEA","NELL","TRUDY","ESPERANZA","PATRICA","KIMBERLEY","SHANNA","HELENA","CAROLINA","CLEO","STEFANIE","ROSARIO","OLA","JANINE","MOLLIE","LUPE","ALISA","LOU","MARIBEL","SUSANNE","BETTE","SUSANA","ELISE","CECILE","ISABELLE","LESLEY","JOCELYN","PAIGE","JONI","RACHELLE","LEOLA","DAPHNE","ALTA","ESTER","PETRA","GRACIELA","IMOGENE","JOLENE","KEISHA","LACEY","GLENNA","GABRIELA","KERI","URSULA","LIZZIE","KIRSTEN","SHANA","ADELINE","MAYRA","JAYNE","JACLYN","GRACIE","SONDRA","CARMELA","MARISA","ROSALIND","CHARITY","TONIA","BEATRIZ","MARISOL","CLARICE","JEANINE","SHEENA","ANGELINE","FRIEDA","LILY","ROBBIE","SHAUNA","MILLIE","CLAUDETTE","CATHLEEN","ANGELIA","GABRIELLE","AUTUMN","KATHARINE","SUMMER","JODIE","STACI","LEA","CHRISTI","JIMMIE","JUSTINE","ELMA","LUELLA","MARGRET","DOMINIQUE","SOCORRO","RENE","MARTINA","MARGO","MAVIS","CALLIE","BOBBI","MARITZA","LUCILE","LEANNE","JEANNINE","DEANA","AILEEN","LORIE","LADONNA","WILLA","MANUELA","GALE","SELMA","DOLLY","SYBIL","ABBY","LARA","DALE","IVY","DEE","WINNIE","MARCY","LUISA","JERI","MAGDALENA","OFELIA","MEAGAN","AUDRA","MATILDA","LEILA","CORNELIA","BIANCA","SIMONE","BETTYE","RANDI","VIRGIE","LATISHA","BARBRA","GEORGINA","ELIZA","LEANN","BRIDGETTE","RHODA","HALEY","ADELA","NOLA","BERNADINE","FLOSSIE","ILA","GRETA","RUTHIE","NELDA","MINERVA","LILLY","TERRIE","LETHA","HILARY","ESTELA","VALARIE","BRIANNA","ROSALYN","EARLINE","CATALINA","AVA","MIA","CLARISSA","LIDIA","CORRINE","ALEXANDRIA","CONCEPCION","TIA","SHARRON","RAE","DONA","ERICKA","JAMI","ELNORA","CHANDRA","LENORE","NEVA","MARYLOU","MELISA","TABATHA","SERENA","AVIS","ALLIE","SOFIA","JEANIE","ODESSA","NANNIE","HARRIETT","LORAINE","PENELOPE","MILAGROS","EMILIA","BENITA","ALLYSON","ASHLEE","TANIA","TOMMIE","ESMERALDA","KARINA","EVE","PEARLIE","ZELMA","MALINDA","NOREEN","TAMEKA","SAUNDRA","HILLARY","AMIE","ALTHEA","ROSALINDA","JORDAN","LILIA","ALANA","GAY","CLARE","ALEJANDRA","ELINOR","MICHAEL","LORRIE","JERRI","DARCY","EARNESTINE","CARMELLA","TAYLOR","NOEMI","MARCIE","LIZA","ANNABELLE","LOUISA","EARLENE","MALLORY","CARLENE","NITA","SELENA","TANISHA","KATY","JULIANNE","JOHN","LAKISHA","EDWINA","MARICELA","MARGERY","KENYA","DOLLIE","ROXIE","ROSLYN","KATHRINE","NANETTE","CHARMAINE","LAVONNE","ILENE","KRIS","TAMMI","SUZETTE","CORINE","KAYE","JERRY","MERLE","CHRYSTAL","LINA","DEANNE","LILIAN","JULIANA","ALINE","LUANN","KASEY","MARYANNE","EVANGELINE","COLETTE","MELVA","LAWANDA","YESENIA","NADIA","MADGE","KATHIE","EDDIE","OPHELIA","VALERIA","NONA","MITZI","MARI","GEORGETTE","CLAUDINE","FRAN","ALISSA","ROSEANN","LAKEISHA","SUSANNA","REVA","DEIDRE","CHASITY","SHEREE","CARLY","JAMES","ELVIA","ALYCE","DEIRDRE","GENA","BRIANA","ARACELI","KATELYN","ROSANNE","WENDI","TESSA","BERTA","MARVA","IMELDA","MARIETTA","MARCI","LEONOR","ARLINE","SASHA","MADELYN","JANNA","JULIETTE","DEENA","AURELIA","JOSEFA","AUGUSTA","LILIANA","YOUNG","CHRISTIAN","LESSIE","AMALIA","SAVANNAH","ANASTASIA","VILMA","NATALIA","ROSELLA","LYNNETTE","CORINA","ALFREDA","LEANNA","CAREY","AMPARO","COLEEN","TAMRA","AISHA","WILDA","KARYN","CHERRY","QUEEN","MAURA","MAI","EVANGELINA","ROSANNA","HALLIE","ERNA","ENID","MARIANA","LACY","JULIET","JACKLYN","FREIDA","MADELEINE","MARA","HESTER","CATHRYN","LELIA","CASANDRA","BRIDGETT","ANGELITA","JANNIE","DIONNE","ANNMARIE","KATINA","BERYL","PHOEBE","MILLICENT","KATHERYN","DIANN","CARISSA","MARYELLEN","LIZ","LAURI","HELGA","GILDA","ADRIAN","RHEA","MARQUITA","HOLLIE","TISHA","TAMERA","ANGELIQUE","FRANCESCA","BRITNEY","KAITLIN","LOLITA","FLORINE","ROWENA","REYNA","TWILA","FANNY","JANELL","INES","CONCETTA","BERTIE","ALBA","BRIGITTE","ALYSON","VONDA","PANSY","ELBA","NOELLE","LETITIA","KITTY","DEANN","BRANDIE","LOUELLA","LETA","FELECIA","SHARLENE","LESA","BEVERLEY","ROBERT","ISABELLA","HERMINIA","TERRA","CELINA","TORI","OCTAVIA","JADE","DENICE","GERMAINE","SIERRA","MICHELL","CORTNEY","NELLY","DORETHA","SYDNEY","DEIDRA","MONIKA","LASHONDA","JUDI","CHELSEY","ANTIONETTE","MARGOT","BOBBY","ADELAIDE","NAN","LEEANN","ELISHA","DESSIE","LIBBY","KATHI","GAYLA","LATANYA","MINA","MELLISA","KIMBERLEE","JASMIN","RENAE","ZELDA","ELDA","MA","JUSTINA","GUSSIE","EMILIE","CAMILLA","ABBIE","ROCIO","KAITLYN","JESSE","EDYTHE","ASHLEIGH","SELINA","LAKESHA","GERI","ALLENE","PAMALA","MICHAELA","DAYNA","CARYN","ROSALIA","SUN","JACQULINE","REBECA","MARYBETH","KRYSTLE","IOLA","DOTTIE","BENNIE","BELLE","AUBREY","GRISELDA","ERNESTINA","ELIDA","ADRIANNE","DEMETRIA","DELMA","CHONG","JAQUELINE","DESTINY","ARLEEN","VIRGINA","RETHA","FATIMA","TILLIE","ELEANORE","CARI","TREVA","BIRDIE","WILHELMINA","ROSALEE","MAURINE","LATRICE","YONG","JENA","TARYN","ELIA","DEBBY","MAUDIE","JEANNA","DELILAH","CATRINA","SHONDA","HORTENCIA","THEODORA","TERESITA","ROBBIN","DANETTE","MARYJANE","FREDDIE","DELPHINE","BRIANNE","NILDA","DANNA","CINDI","BESS","IONA","HANNA","ARIEL","WINONA","VIDA","ROSITA","MARIANNA","WILLIAM","RACHEAL","GUILLERMINA","ELOISA","CELESTINE","CAREN","MALISSA","LONA","CHANTEL","SHELLIE","MARISELA","LEORA","AGATHA","SOLEDAD","MIGDALIA","IVETTE","CHRISTEN","ATHENA","JANEL","CHLOE","VEDA","PATTIE","TESSIE","TERA","MARILYNN","LUCRETIA","KARRIE","DINAH","DANIELA","ALECIA","ADELINA","VERNICE","SHIELA","PORTIA","MERRY","LASHAWN","DEVON","DARA","TAWANA","OMA","VERDA","CHRISTIN","ALENE","ZELLA","SANDI","RAFAELA","MAYA","KIRA","CANDIDA","ALVINA","SUZAN","SHAYLA","LYN","LETTIE","ALVA","SAMATHA","ORALIA","MATILDE","MADONNA","LARISSA","VESTA","RENITA","INDIA","DELOIS","SHANDA","PHILLIS","LORRI","ERLINDA","CRUZ","CATHRINE","BARB","ZOE","ISABELL","IONE","GISELA","CHARLIE","VALENCIA","ROXANNA","MAYME","KISHA","ELLIE","MELLISSA","DORRIS","DALIA","BELLA","ANNETTA","ZOILA","RETA","REINA","LAURETTA","KYLIE","CHRISTAL","PILAR","CHARLA","ELISSA","TIFFANI","TANA","PAULINA","LEOTA","BREANNA","JAYME","CARMEL","VERNELL","TOMASA","MANDI","DOMINGA","SANTA","MELODIE","LURA","ALEXA","TAMELA","RYAN","MIRNA","KERRIE","VENUS","NOEL","FELICITA","CRISTY","CARMELITA","BERNIECE","ANNEMARIE","TIARA","ROSEANNE","MISSY","CORI","ROXANA","PRICILLA","KRISTAL","JUNG","ELYSE","HAYDEE","ALETHA","BETTINA","MARGE","GILLIAN","FILOMENA","CHARLES","ZENAIDA","HARRIETTE","CARIDAD","VADA","UNA","ARETHA","PEARLINE","MARJORY","MARCELA","FLOR","EVETTE","ELOUISE","ALINA","TRINIDAD","DAVID","DAMARIS","CATHARINE","CARROLL","BELVA","NAKIA","MARLENA","LUANNE","LORINE","KARON","DORENE","DANITA","BRENNA","TATIANA","SAMMIE","LOUANN","LOREN","JULIANNA","ANDRIA","PHILOMENA","LUCILA","LEONORA","DOVIE","ROMONA","MIMI","JACQUELIN","GAYE","TONJA","MISTI","JOE","GENE","CHASTITY","STACIA","ROXANN","MICAELA","NIKITA","MEI","VELDA","MARLYS","JOHNNA","AURA","LAVERN","IVONNE","HAYLEY","NICKI","MAJORIE","HERLINDA","GEORGE","ALPHA","YADIRA","PERLA","GREGORIA","DANIEL","ANTONETTE","SHELLI","MOZELLE","MARIAH","JOELLE","CORDELIA","JOSETTE","CHIQUITA","TRISTA","LOUIS","LAQUITA","GEORGIANA","CANDI","SHANON","LONNIE","HILDEGARD","CECIL","VALENTINA","STEPHANY","MAGDA","KAROL","GERRY","GABRIELLA","TIANA","ROMA","RICHELLE","RAY","PRINCESS","OLETA","JACQUE","IDELLA","ALAINA","SUZANNA","JOVITA","BLAIR","TOSHA","RAVEN","NEREIDA","MARLYN","KYLA","JOSEPH","DELFINA","TENA","STEPHENIE","SABINA","NATHALIE","MARCELLE","GERTIE","DARLEEN","THEA","SHARONDA","SHANTEL","BELEN","VENESSA","ROSALINA","ONA","GENOVEVA","COREY","CLEMENTINE","ROSALBA","RENATE","RENATA","MI","IVORY","GEORGIANNA","FLOY","DORCAS","ARIANA","TYRA","THEDA","MARIAM","JULI","JESICA","DONNIE","VIKKI","VERLA","ROSELYN","MELVINA","JANNETTE","GINNY","DEBRAH","CORRIE","ASIA","VIOLETA","MYRTIS","LATRICIA","COLLETTE","CHARLEEN","ANISSA","VIVIANA","TWYLA","PRECIOUS","NEDRA","LATONIA","LAN","HELLEN","FABIOLA","ANNAMARIE","ADELL","SHARYN","CHANTAL","NIKI","MAUD","LIZETTE","LINDY","KIA","KESHA","JEANA","DANELLE","CHARLINE","CHANEL","CARROL","VALORIE","LIA","DORTHA","CRISTAL","SUNNY","LEONE","LEILANI","GERRI","DEBI","ANDRA","KESHIA","IMA","EULALIA","EASTER","DULCE","NATIVIDAD","LINNIE","KAMI","GEORGIE","CATINA","BROOK","ALDA","WINNIFRED","SHARLA","RUTHANN","MEAGHAN","MAGDALENE","LISSETTE","ADELAIDA","VENITA","TRENA","SHIRLENE","SHAMEKA","ELIZEBETH","DIAN","SHANTA","MICKEY","LATOSHA","CARLOTTA","WINDY","SOON","ROSINA","MARIANN","LEISA","JONNIE","DAWNA","CATHIE","BILLY","ASTRID","SIDNEY","LAUREEN","JANEEN","HOLLI","FAWN","VICKEY","TERESSA","SHANTE","RUBYE","MARCELINA","CHANDA","CARY","TERESE","SCARLETT","MARTY","MARNIE","LULU","LISETTE","JENIFFER","ELENOR","DORINDA","DONITA","CARMAN","BERNITA","ALTAGRACIA","ALETA","ADRIANNA","ZORAIDA","RONNIE","NICOLA","LYNDSEY","KENDALL","JANINA","CHRISSY","AMI","STARLA","PHYLIS","PHUONG","KYRA","CHARISSE","BLANCH","SANJUANITA","RONA","NANCI","MARILEE","MARANDA","CORY","BRIGETTE","SANJUANA","MARITA","KASSANDRA","JOYCELYN","IRA","FELIPA","CHELSIE","BONNY","MIREYA","LORENZA","KYONG","ILEANA","CANDELARIA","TONY","TOBY","SHERIE","OK","MARK","LUCIE","LEATRICE","LAKESHIA","GERDA","EDIE","BAMBI","MARYLIN","LAVON","HORTENSE","GARNET","EVIE","TRESSA","SHAYNA","LAVINA","KYUNG","JEANETTA","SHERRILL","SHARA","PHYLISS","MITTIE","ANABEL","ALESIA","THUY","TAWANDA","RICHARD","JOANIE","TIFFANIE","LASHANDA","KARISSA","ENRIQUETA","DARIA","DANIELLA","CORINNA","ALANNA","ABBEY","ROXANE","ROSEANNA","MAGNOLIA","LIDA","KYLE","JOELLEN","ERA","CORAL","CARLEEN","TRESA","PEGGIE","NOVELLA","NILA","MAYBELLE","JENELLE","CARINA","NOVA","MELINA","MARQUERITE","MARGARETTE","JOSEPHINA","EVONNE","DEVIN","CINTHIA","ALBINA","TOYA","TAWNYA","SHERITA","SANTOS","MYRIAM","LIZABETH","LISE","KEELY","JENNI","GISELLE","CHERYLE","ARDITH","ARDIS","ALESHA","ADRIANE","SHAINA","LINNEA","KAROLYN","HONG","FLORIDA","FELISHA","DORI","DARCI","ARTIE","ARMIDA","ZOLA","XIOMARA","VERGIE","SHAMIKA","NENA","NANNETTE","MAXIE","LOVIE","JEANE","JAIMIE","INGE","FARRAH","ELAINA","CAITLYN","STARR","FELICITAS","CHERLY","CARYL","YOLONDA","YASMIN","TEENA","PRUDENCE","PENNIE","NYDIA","MACKENZIE","ORPHA","MARVEL","LIZBETH","LAURETTE","JERRIE","HERMELINDA","CAROLEE","TIERRA","MIRIAN","META","MELONY","KORI","JENNETTE","JAMILA","ENA","ANH","YOSHIKO","SUSANNAH","SALINA","RHIANNON","JOLEEN","CRISTINE","ASHTON","ARACELY","TOMEKA","SHALONDA","MARTI","LACIE","KALA","JADA","ILSE","HAILEY","BRITTANI","ZONA","SYBLE","SHERRYL","RANDY","NIDIA","MARLO","KANDICE","KANDI","DEB","DEAN","AMERICA","ALYCIA","TOMMY","RONNA","NORENE","MERCY","JOSE","INGEBORG","GIOVANNA","GEMMA","CHRISTEL","AUDRY","ZORA","VITA","VAN","TRISH","STEPHAINE","SHIRLEE","SHANIKA","MELONIE","MAZIE","JAZMIN","INGA","HOA","HETTIE","GERALYN","FONDA","ESTRELLA","ADELLA","SU","SARITA","RINA","MILISSA","MARIBETH","GOLDA","EVON","ETHELYN","ENEDINA","CHERISE","CHANA","VELVA","TAWANNA","SADE","MIRTA","LI","KARIE","JACINTA","ELNA","DAVINA","CIERRA","ASHLIE","ALBERTHA","TANESHA","STEPHANI","NELLE","MINDI","LU","LORINDA","LARUE","FLORENE","DEMETRA","DEDRA","CIARA","CHANTELLE","ASHLY","SUZY","ROSALVA","NOELIA","LYDA","LEATHA","KRYSTYNA","KRISTAN","KARRI","DARLINE","DARCIE","CINDA","CHEYENNE","CHERRIE","AWILDA","ALMEDA","ROLANDA","LANETTE","JERILYN","GISELE","EVALYN","CYNDI","CLETA","CARIN","ZINA","ZENA","VELIA","TANIKA","PAUL","CHARISSA","THOMAS","TALIA","MARGARETE","LAVONDA","KAYLEE","KATHLENE","JONNA","IRENA","ILONA","IDALIA","CANDIS","CANDANCE","BRANDEE","ANITRA","ALIDA","SIGRID","NICOLETTE","MARYJO","LINETTE","HEDWIG","CHRISTIANA","CASSIDY","ALEXIA","TRESSIE","MODESTA","LUPITA","LITA","GLADIS","EVELIA","DAVIDA","CHERRI","CECILY","ASHELY","ANNABEL","AGUSTINA","WANITA","SHIRLY","ROSAURA","HULDA","EUN","BAILEY","YETTA","VERONA","THOMASINA","SIBYL","SHANNAN","MECHELLE","LUE","LEANDRA","LANI","KYLEE","KANDY","JOLYNN","FERNE","EBONI","CORENE","ALYSIA","ZULA","NADA","MOIRA","LYNDSAY","LORRETTA","JUAN","JAMMIE","HORTENSIA","GAYNELL","CAMERON","ADRIA","VINA","VICENTA","TANGELA","STEPHINE","NORINE","NELLA","LIANA","LESLEE","KIMBERELY","ILIANA","GLORY","FELICA","EMOGENE","ELFRIEDE","EDEN","EARTHA","CARMA","BEA","OCIE","MARRY","LENNIE","KIARA","JACALYN","CARLOTA","ARIELLE","YU","STAR","OTILIA","KIRSTIN","KACEY","JOHNETTA","JOEY","JOETTA","JERALDINE","JAUNITA","ELANA","DORTHEA","CAMI","AMADA","ADELIA","VERNITA","TAMAR","SIOBHAN","RENEA","RASHIDA","OUIDA","ODELL","NILSA","MERYL","KRISTYN","JULIETA","DANICA","BREANNE","AUREA","ANGLEA","SHERRON","ODETTE","MALIA","LORELEI","LIN","LEESA","KENNA","KATHLYN","FIONA","CHARLETTE","SUZIE","SHANTELL","SABRA","RACQUEL","MYONG","MIRA","MARTINE","LUCIENNE","LAVADA","JULIANN","JOHNIE","ELVERA","DELPHIA","CLAIR","CHRISTIANE","CHAROLETTE","CARRI","AUGUSTINE","ASHA","ANGELLA","PAOLA","NINFA","LEDA","LAI","EDA","SUNSHINE","STEFANI","SHANELL","PALMA","MACHELLE","LISSA","KECIA","KATHRYNE","KARLENE","JULISSA","JETTIE","JENNIFFER","HUI","CORRINA","CHRISTOPHER","CAROLANN","ALENA","TESS","ROSARIA","MYRTICE","MARYLEE","LIANE","KENYATTA","JUDIE","JANEY","IN","ELMIRA","ELDORA","DENNA","CRISTI","CATHI","ZAIDA","VONNIE","VIVA","VERNIE","ROSALINE","MARIELA","LUCIANA","LESLI","KARAN","FELICE","DENEEN","ADINA","WYNONA","TARSHA","SHERON","SHASTA","SHANITA","SHANI","SHANDRA","RANDA","PINKIE","PARIS","NELIDA","MARILOU","LYLA","LAURENE","LACI","JOI","JANENE","DOROTHA","DANIELE","DANI","CAROLYNN","CARLYN","BERENICE","AYESHA","ANNELIESE","ALETHEA","THERSA","TAMIKO","RUFINA","OLIVA","MOZELL","MARYLYN","MADISON","KRISTIAN","KATHYRN","KASANDRA","KANDACE","JANAE","GABRIEL","DOMENICA","DEBBRA","DANNIELLE","CHUN","BUFFY","BARBIE","ARCELIA","AJA","ZENOBIA","SHAREN","SHAREE","PATRICK","PAGE","MY","LAVINIA","KUM","KACIE","JACKELINE","HUONG","FELISA","EMELIA","ELEANORA","CYTHIA","CRISTIN","CLYDE","CLARIBEL","CARON","ANASTACIA","ZULMA","ZANDRA","YOKO","TENISHA","SUSANN","SHERILYN","SHAY","SHAWANDA","SABINE","ROMANA","MATHILDA","LINSEY","KEIKO","JOANA","ISELA","GRETTA","GEORGETTA","EUGENIE","DUSTY","DESIRAE","DELORA","CORAZON","ANTONINA","ANIKA","WILLENE","TRACEE","TAMATHA","REGAN","NICHELLE","MICKIE","MAEGAN","LUANA","LANITA","KELSIE","EDELMIRA","BREE","AFTON","TEODORA","TAMIE","SHENA","MEG","LINH","KELI","KACI","DANYELLE","BRITT","ARLETTE","ALBERTINE","ADELLE","TIFFINY","STORMY","SIMONA","NUMBERS","NICOLASA","NICHOL","NIA","NAKISHA","MEE","MAIRA","LOREEN","KIZZY","JOHNNY","JAY","FALLON","CHRISTENE","BOBBYE","ANTHONY","YING","VINCENZA","TANJA","RUBIE","RONI","QUEENIE","MARGARETT","KIMBERLI","IRMGARD","IDELL","HILMA","EVELINA","ESTA","EMILEE","DENNISE","DANIA","CARL","CARIE","ANTONIO","WAI","SANG","RISA","RIKKI","PARTICIA","MUI","MASAKO","MARIO","LUVENIA","LOREE","LONI","LIEN","KEVIN","GIGI","FLORENCIA","DORIAN","DENITA","DALLAS","CHI","BILLYE","ALEXANDER","TOMIKA","SHARITA","RANA","NIKOLE","NEOMA","MARGARITE","MADALYN","LUCINA","LAILA","KALI","JENETTE","GABRIELE","EVELYNE","ELENORA","CLEMENTINA","ALEJANDRINA","ZULEMA","VIOLETTE","VANNESSA","THRESA","RETTA","PIA","PATIENCE","NOELLA","NICKIE","JONELL","DELTA","CHUNG","CHAYA","CAMELIA","BETHEL","ANYA","ANDREW","THANH","SUZANN","SPRING","SHU","MILA","LILLA","LAVERNA","KEESHA","KATTIE","GIA","GEORGENE","EVELINE","ESTELL","ELIZBETH","VIVIENNE","VALLIE","TRUDIE","STEPHANE","MICHEL","MAGALY","MADIE","KENYETTA","KARREN","JANETTA","HERMINE","HARMONY","DRUCILLA","DEBBI","CELESTINA","CANDIE","BRITNI","BECKIE","AMINA","ZITA","YUN","YOLANDE","VIVIEN","VERNETTA","TRUDI","SOMMER","PEARLE","PATRINA","OSSIE","NICOLLE","LOYCE","LETTY","LARISA","KATHARINA","JOSELYN","JONELLE","JENELL","IESHA","HEIDE","FLORINDA","FLORENTINA","FLO","ELODIA","DORINE","BRUNILDA","BRIGID","ASHLI","ARDELLA","TWANA","THU","TARAH","SUNG","SHEA","SHAVON","SHANE","SERINA","RAYNA","RAMONITA","NGA","MARGURITE","LUCRECIA","KOURTNEY","KATI","JESUS","JESENIA","DIAMOND","CRISTA","AYANA","ALICA","ALIA","VINNIE","SUELLEN","ROMELIA","RACHELL","PIPER","OLYMPIA","MICHIKO","KATHALEEN","JOLIE","JESSI","JANESSA","HANA","HA","ELEASE","CARLETTA","BRITANY","SHONA","SALOME","ROSAMOND","REGENA","RAINA","NGOC","NELIA","LOUVENIA","LESIA","LATRINA","LATICIA","LARHONDA","JINA","JACKI","HOLLIS","HOLLEY","EMMY","DEEANN","CORETTA","ARNETTA","VELVET","THALIA","SHANICE","NETA","MIKKI","MICKI","LONNA","LEANA","LASHUNDA","KILEY","JOYE","JACQULYN","IGNACIA","HYUN","HIROKO","HENRY","HENRIETTE","ELAYNE","DELINDA","DARNELL","DAHLIA","COREEN","CONSUELA","CONCHITA","CELINE","BABETTE","AYANNA","ANETTE","ALBERTINA","SKYE","SHAWNEE","SHANEKA","QUIANA","PAMELIA","MIN","MERRI","MERLENE","MARGIT","KIESHA","KIERA","KAYLENE","JODEE","JENISE","ERLENE","EMMIE","ELSE","DARYL","DALILA","DAISEY","CODY","CASIE","BELIA","BABARA","VERSIE","VANESA","SHELBA","SHAWNDA","SAM","NORMAN","NIKIA","NAOMA","MARNA","MARGERET","MADALINE","LAWANA","KINDRA","JUTTA","JAZMINE","JANETT","HANNELORE","GLENDORA","GERTRUD","GARNETT","FREEDA","FREDERICA","FLORANCE","FLAVIA","DENNIS","CARLINE","BEVERLEE","ANJANETTE","VALDA","TRINITY","TAMALA","STEVIE","SHONNA","SHA","SARINA","ONEIDA","MICAH","MERILYN","MARLEEN","LURLINE","LENNA","KATHERIN","JIN","JENI","HAE","GRACIA","GLADY","FARAH","ERIC","ENOLA","EMA","DOMINQUE","DEVONA","DELANA","CECILA","CAPRICE","ALYSHA","ALI","ALETHIA","VENA","THERESIA","TAWNY","SONG","SHAKIRA","SAMARA","SACHIKO","RACHELE","PAMELLA","NICKY","MARNI","MARIEL","MAREN","MALISA","LIGIA","LERA","LATORIA","LARAE","KIMBER","KATHERN","KAREY","JENNEFER","JANETH","HALINA","FREDIA","DELISA","DEBROAH","CIERA","CHIN","ANGELIKA","ANDREE","ALTHA","YEN","VIVAN","TERRESA","TANNA","SUK","SUDIE","SOO","SIGNE","SALENA","RONNI","REBBECCA","MYRTIE","MCKENZIE","MALIKA","MAIDA","LOAN","LEONARDA","KAYLEIGH","FRANCE","ETHYL","ELLYN","DAYLE","CAMMIE","BRITTNI","BIRGIT","AVELINA","ASUNCION","ARIANNA","AKIKO","VENICE","TYESHA","TONIE","TIESHA","TAKISHA","STEFFANIE","SINDY","SANTANA","MEGHANN","MANDA","MACIE","LADY","KELLYE","KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS","FERNANDA","FAUSTINA","ENEIDA","ELICIA","DOT","DIGNA","DELL","ARLETTA","ANDRE","WILLIA","TAMMARA","TABETHA","SHERRELL","SARI","REFUGIO","REBBECA","PAULETTA","NIEVES","NATOSHA","NAKITA","MAMMIE","KENISHA","KAZUKO","KASSIE","GARY","EARLEAN","DAPHINE","CORLISS","CLOTILDE","CAROLYNE","BERNETTA","AUGUSTINA","AUDREA","ANNIS","ANNABELL","YAN","TENNILLE","TAMICA","SELENE","SEAN","ROSANA","REGENIA","QIANA","MARKITA","MACY","LEEANNE","LAURINE","KYM","JESSENIA","JANITA","GEORGINE","GENIE","EMIKO","ELVIE","DEANDRA","DAGMAR","CORIE","COLLEN","CHERISH","ROMAINE","PORSHA","PEARLENE","MICHELINE","MERNA","MARGORIE","MARGARETTA","LORE","KENNETH","JENINE","HERMINA","FREDERICKA","ELKE","DRUSILLA","DORATHY","DIONE","DESIRE","CELENA","BRIGIDA","ANGELES","ALLEGRA","THEO","TAMEKIA","SYNTHIA","STEPHEN","SOOK","SLYVIA","ROSANN","REATHA","RAYE","MARQUETTA","MARGART","LING","LAYLA","KYMBERLY","KIANA","KAYLEEN","KATLYN","KARMEN","JOELLA","IRINA","EMELDA","ELENI","DETRA","CLEMMIE","CHERYLL","CHANTELL","CATHEY","ARNITA","ARLA","ANGLE","ANGELIC","ALYSE","ZOFIA","THOMASINE","TENNIE","SON","SHERLY","SHERLEY","SHARYL","REMEDIOS","PETRINA","NICKOLE","MYUNG","MYRLE","MOZELLA","LOUANNE","LISHA","LATIA","LANE","KRYSTA","JULIENNE","JOEL","JEANENE","JACQUALINE","ISAURA","GWENDA","EARLEEN","DONALD","CLEOPATRA","CARLIE","AUDIE","ANTONIETTA","ALISE","ALEX","VERDELL","VAL","TYLER","TOMOKO","THAO","TALISHA","STEVEN","SO","SHEMIKA","SHAUN","SCARLET","SAVANNA","SANTINA","ROSIA","RAEANN","ODILIA","NANA","MINNA","MAGAN","LYNELLE","LE","KARMA","JOEANN","IVANA","INELL","ILANA","HYE","HONEY","HEE","GUDRUN","FRANK","DREAMA","CRISSY","CHANTE","CARMELINA","ARVILLA","ARTHUR","ANNAMAE","ALVERA","ALEIDA","AARON","YEE","YANIRA","VANDA","TIANNA","TAM","STEFANIA","SHIRA","PERRY","NICOL","NANCIE","MONSERRATE","MINH","MELYNDA","MELANY","MATTHEW","LOVELLA","LAURE","KIRBY","KACY","JACQUELYNN","HYON","GERTHA","FRANCISCO","ELIANA","CHRISTENA","CHRISTEEN","CHARISE","CATERINA","CARLEY","CANDYCE","ARLENA","AMMIE","YANG","WILLETTE","VANITA","TUYET","TINY","SYREETA","SILVA","SCOTT","RONALD","PENNEY","NYLA","MICHAL","MAURICE","MARYAM","MARYA","MAGEN","LUDIE","LOMA","LIVIA","LANELL","KIMBERLIE","JULEE","DONETTA","DIEDRA","DENISHA","DEANE","DAWNE","CLARINE","CHERRYL","BRONWYN","BRANDON","ALLA","VALERY","TONDA","SUEANN","SORAYA","SHOSHANA","SHELA","SHARLEEN","SHANELLE","NERISSA","MICHEAL","MERIDITH","MELLIE","MAYE","MAPLE","MAGARET","LUIS","LILI","LEONILA","LEONIE","LEEANNA","LAVONIA","LAVERA","KRISTEL","KATHEY","KATHE","JUSTIN","JULIAN","JIMMY","JANN","ILDA","HILDRED","HILDEGARDE","GENIA","FUMIKO","EVELIN","ERMELINDA","ELLY","DUNG","DOLORIS","DIONNA","DANAE","BERNEICE","ANNICE","ALIX","VERENA","VERDIE","TRISTAN","SHAWNNA","SHAWANA","SHAUNNA","ROZELLA","RANDEE","RANAE","MILAGRO","LYNELL","LUISE","LOUIE","LOIDA","LISBETH","KARLEEN","JUNITA","JONA","ISIS","HYACINTH","HEDY","GWENN","ETHELENE","ERLINE","EDWARD","DONYA","DOMONIQUE","DELICIA","DANNETTE","CICELY","BRANDA","BLYTHE","BETHANN","ASHLYN","ANNALEE","ALLINE","YUKO","VELLA","TRANG","TOWANDA","TESHA","SHERLYN","NARCISA","MIGUELINA","MERI","MAYBELL","MARLANA","MARGUERITA","MADLYN","LUNA","LORY","LORIANN","LIBERTY","LEONORE","LEIGHANN","LAURICE","LATESHA","LARONDA","KATRICE","KASIE","KARL","KALEY","JADWIGA","GLENNIE","GEARLDINE","FRANCINA","EPIFANIA","DYAN","DORIE","DIEDRE","DENESE","DEMETRICE","DELENA","DARBY","CRISTIE","CLEORA","CATARINA","CARISA","BERNIE","BARBERA","ALMETA","TRULA","TEREASA","SOLANGE","SHEILAH","SHAVONNE","SANORA","ROCHELL","MATHILDE","MARGARETA","MAIA","LYNSEY","LAWANNA","LAUNA","KENA","KEENA","KATIA","JAMEY","GLYNDA","GAYLENE","ELVINA","ELANOR","DANUTA","DANIKA","CRISTEN","CORDIE","COLETTA","CLARITA","CARMON","BRYNN","AZUCENA","AUNDREA","ANGELE","YI","WALTER","VERLIE","VERLENE","TAMESHA","SILVANA","SEBRINA","SAMIRA","REDA","RAYLENE","PENNI","PANDORA","NORAH","NOMA","MIREILLE","MELISSIA","MARYALICE","LARAINE","KIMBERY","KARYL","KARINE","KAM","JOLANDA","JOHANA","JESUSA","JALEESA","JAE","JACQUELYNE","IRISH","ILUMINADA","HILARIA","HANH","GENNIE","FRANCIE","FLORETTA","EXIE","EDDA","DREMA","DELPHA","BEV","BARBAR","ASSUNTA","ARDELL","ANNALISA","ALISIA","YUKIKO","YOLANDO","WONDA","WEI","WALTRAUD","VETA","TEQUILA","TEMEKA","TAMEIKA","SHIRLEEN","SHENITA","PIEDAD","OZELLA","MIRTHA","MARILU","KIMIKO","JULIANE","JENICE","JEN","JANAY","JACQUILINE","HILDE","FE","FAE","EVAN","EUGENE","ELOIS","ECHO","DEVORAH","CHAU","BRINDA","BETSEY","ARMINDA","ARACELIS","APRYL","ANNETT","ALISHIA","VEOLA","USHA","TOSHIKO","THEOLA","TASHIA","TALITHA","SHERY","RUDY","RENETTA","REIKO","RASHEEDA","OMEGA","OBDULIA","MIKA","MELAINE","MEGGAN","MARTIN","MARLEN","MARGET","MARCELINE","MANA","MAGDALEN","LIBRADA","LEZLIE","LEXIE","LATASHIA","LASANDRA","KELLE","ISIDRA","ISA","INOCENCIA","GWYN","FRANCOISE","ERMINIA","ERINN","DIMPLE","DEVORA","CRISELDA","ARMANDA","ARIE","ARIANE","ANGELO","ANGELENA","ALLEN","ALIZA","ADRIENE","ADALINE","XOCHITL","TWANNA","TRAN","TOMIKO","TAMISHA","TAISHA","SUSY","SIU","RUTHA","ROXY","RHONA","RAYMOND","OTHA","NORIKO","NATASHIA","MERRIE","MELVIN","MARINDA","MARIKO","MARGERT","LORIS","LIZZETTE","LEISHA","KAILA","KA","JOANNIE","JERRICA","JENE","JANNET","JANEE","JACINDA","HERTA","ELENORE","DORETTA","DELAINE","DANIELL","CLAUDIE","CHINA","BRITTA","APOLONIA","AMBERLY","ALEASE","YURI","YUK","WEN","WANETA","UTE","TOMI","SHARRI","SANDIE","ROSELLE","REYNALDA","RAGUEL","PHYLICIA","PATRIA","OLIMPIA","ODELIA","MITZIE","MITCHELL","MISS","MINDA","MIGNON","MICA","MENDY","MARIVEL","MAILE","LYNETTA","LAVETTE","LAURYN","LATRISHA","LAKIESHA","KIERSTEN","KARY","JOSPHINE","JOLYN","JETTA","JANISE","JACQUIE","IVELISSE","GLYNIS","GIANNA","GAYNELLE","EMERALD","DEMETRIUS","DANYELL","DANILLE","DACIA","CORALEE","CHER","CEOLA","BRETT","BELL","ARIANNE","ALESHIA","YUNG","WILLIEMAE","TROY","TRINH","THORA","TAI","SVETLANA","SHERIKA","SHEMEKA","SHAUNDA","ROSELINE","RICKI","MELDA","MALLIE","LAVONNA","LATINA","LARRY","LAQUANDA","LALA","LACHELLE","KLARA","KANDIS","JOHNA","JEANMARIE","JAYE","HANG","GRAYCE","GERTUDE","EMERITA","EBONIE","CLORINDA","CHING","CHERY","CAROLA","BREANN","BLOSSOM","BERNARDINE","BECKI","ARLETHA","ARGELIA","ARA","ALITA","YULANDA","YON","YESSENIA","TOBI","TASIA","SYLVIE","SHIRL","SHIRELY","SHERIDAN","SHELLA","SHANTELLE","SACHA","ROYCE","REBECKA","REAGAN","PROVIDENCIA","PAULENE","MISHA","MIKI","MARLINE","MARICA","LORITA","LATOYIA","LASONYA","KERSTIN","KENDA","KEITHA","KATHRIN","JAYMIE","JACK","GRICELDA","GINETTE","ERYN","ELINA","ELFRIEDA","DANYEL","CHEREE","CHANELLE","BARRIE","AVERY","AURORE","ANNAMARIA","ALLEEN","AILENE","AIDE","YASMINE","VASHTI","VALENTINE","TREASA","TORY","TIFFANEY","SHERYLL","SHARIE","SHANAE","SAU","RAISA","PA","NEDA","MITSUKO","MIRELLA","MILDA","MARYANNA","MARAGRET","MABELLE","LUETTA","LORINA","LETISHA","LATARSHA","LANELLE","LAJUANA","KRISSY","KARLY","KARENA","JON","JESSIKA","JERICA","JEANELLE","JANUARY","JALISA","JACELYN","IZOLA","IVEY","GREGORY","EUNA","ETHA","DREW","DOMITILA","DOMINICA","DAINA","CREOLA","CARLI","CAMIE","BUNNY","BRITTNY","ASHANTI","ANISHA","ALEEN","ADAH","YASUKO","WINTER","VIKI","VALRIE","TONA","TINISHA","THI","TERISA","TATUM","TANEKA","SIMONNE","SHALANDA","SERITA","RESSIE","REFUGIA","PAZ","OLENE","NA","MERRILL","MARGHERITA","MANDIE","MAN","MAIRE","LYNDIA","LUCI","LORRIANE","LORETA","LEONIA","LAVONA","LASHAWNDA","LAKIA","KYOKO","KRYSTINA","KRYSTEN","KENIA","KELSI","JUDE","JEANICE","ISOBEL","GEORGIANN","GENNY","FELICIDAD","EILENE","DEON","DELOISE","DEEDEE","DANNIE","CONCEPTION","CLORA","CHERILYN","CHANG","CALANDRA","BERRY","ARMANDINA","ANISA","ULA","TIMOTHY","TIERA","THERESSA","STEPHANIA","SIMA","SHYLA","SHONTA","SHERA","SHAQUITA","SHALA","SAMMY","ROSSANA","NOHEMI","NERY","MORIAH","MELITA","MELIDA","MELANI","MARYLYNN","MARISHA","MARIETTE","MALORIE","MADELENE","LUDIVINA","LORIA","LORETTE","LORALEE","LIANNE","LEON","LAVENIA","LAURINDA","LASHON","KIT","KIMI","KEILA","KATELYNN","KAI","JONE","JOANE","JI","JAYNA","JANELLA","JA","HUE","HERTHA","FRANCENE","ELINORE","DESPINA","DELSIE","DEEDRA","CLEMENCIA","CARRY","CAROLIN","CARLOS","BULAH","BRITTANIE","BOK","BLONDELL","BIBI","BEAULAH","BEATA","ANNITA","AGRIPINA","VIRGEN","VALENE","UN","TWANDA","TOMMYE","TOI","TARRA","TARI","TAMMERA","SHAKIA","SADYE","RUTHANNE","ROCHEL","RIVKA","PURA","NENITA","NATISHA","MING","MERRILEE","MELODEE","MARVIS","LUCILLA","LEENA","LAVETA","LARITA","LANIE","KEREN","ILEEN","GEORGEANN","GENNA","GENESIS","FRIDA","EWA","EUFEMIA","EMELY","ELA","EDYTH","DEONNA","DEADRA","DARLENA","CHANELL","CHAN","CATHERN","CASSONDRA","CASSAUNDRA","BERNARDA","BERNA","ARLINDA","ANAMARIA","ALBERT","WESLEY","VERTIE","VALERI","TORRI","TATYANA","STASIA","SHERISE","SHERILL","SEASON","SCOTTIE","SANDA","RUTHE","ROSY","ROBERTO","ROBBI","RANEE","QUYEN","PEARLY","PALMIRA","ONITA","NISHA","NIESHA","NIDA","NEVADA","NAM","MERLYN","MAYOLA","MARYLOUISE","MARYLAND","MARX","MARTH","MARGENE","MADELAINE","LONDA","LEONTINE","LEOMA","LEIA","LAWRENCE","LAURALEE","LANORA","LAKITA","KIYOKO","KETURAH","KATELIN","KAREEN","JONIE","JOHNETTE","JENEE","JEANETT","IZETTA","HIEDI","HEIKE","HASSIE","HAROLD","GIUSEPPINA","GEORGANN","FIDELA","FERNANDE","ELWANDA","ELLAMAE","ELIZ","DUSTI","DOTTY","CYNDY","CORALIE","CELESTA","ARGENTINA","ALVERTA","XENIA","WAVA","VANETTA","TORRIE","TASHINA","TANDY","TAMBRA","TAMA","STEPANIE","SHILA","SHAUNTA","SHARAN","SHANIQUA","SHAE","SETSUKO","SERAFINA","SANDEE","ROSAMARIA","PRISCILA","OLINDA","NADENE","MUOI","MICHELINA","MERCEDEZ","MARYROSE","MARIN","MARCENE","MAO","MAGALI","MAFALDA","LOGAN","LINN","LANNIE","KAYCE","KAROLINE","KAMILAH","KAMALA","JUSTA","JOLINE","JENNINE","JACQUETTA","IRAIDA","GERALD","GEORGEANNA","FRANCHESCA","FAIRY","EMELINE","ELANE","EHTEL","EARLIE","DULCIE","DALENE","CRIS","CLASSIE","CHERE","CHARIS","CAROYLN","CARMINA","CARITA","BRIAN","BETHANIE","AYAKO","ARICA","AN","ALYSA","ALESSANDRA","AKILAH","ADRIEN","ZETTA","YOULANDA","YELENA","YAHAIRA","XUAN","WENDOLYN","VICTOR","TIJUANA","TERRELL","TERINA","TERESIA","SUZI","SUNDAY","SHERELL","SHAVONDA","SHAUNTE","SHARDA","SHAKITA","SENA","RYANN","RUBI","RIVA","REGINIA","REA","RACHAL","PARTHENIA","PAMULA","MONNIE","MONET","MICHAELE","MELIA","MARINE","MALKA","MAISHA","LISANDRA","LEO","LEKISHA","LEAN","LAURENCE","LAKENDRA","KRYSTIN","KORTNEY","KIZZIE","KITTIE","KERA","KENDAL","KEMBERLY","KANISHA","JULENE","JULE","JOSHUA","JOHANNE","JEFFREY","JAMEE","HAN","HALLEY","GIDGET","GALINA","FREDRICKA","FLETA","FATIMAH","EUSEBIA","ELZA","ELEONORE","DORTHEY","DORIA","DONELLA","DINORAH","DELORSE","CLARETHA","CHRISTINIA","CHARLYN","BONG","BELKIS","AZZIE","ANDERA","AIKO","ADENA","YER","YAJAIRA","WAN","VANIA","ULRIKE","TOSHIA","TIFANY","STEFANY","SHIZUE","SHENIKA","SHAWANNA","SHAROLYN","SHARILYN","SHAQUANA","SHANTAY","SEE","ROZANNE","ROSELEE","RICKIE","REMONA","REANNA","RAELENE","QUINN","PHUNG","PETRONILA","NATACHA","NANCEY","MYRL","MIYOKO","MIESHA","MERIDETH","MARVELLA","MARQUITTA","MARHTA","MARCHELLE","LIZETH","LIBBIE","LAHOMA","LADAWN","KINA","KATHELEEN","KATHARYN","KARISA","KALEIGH","JUNIE","JULIEANN","JOHNSIE","JANEAN","JAIMEE","JACKQUELINE","HISAKO","HERMA","HELAINE","GWYNETH","GLENN","GITA","EUSTOLIA","EMELINA","ELIN","EDRIS","DONNETTE","DONNETTA","DIERDRE","DENAE","DARCEL","CLAUDE","CLARISA","CINDERELLA","CHIA","CHARLESETTA","CHARITA","CELSA","CASSY","CASSI","CARLEE","BRUNA","BRITTANEY","BRANDE","BILLI","BAO","ANTONETTA","ANGLA","ANGELYN","ANALISA","ALANE","WENONA","WENDIE","VERONIQUE","VANNESA","TOBIE","TEMPIE","SUMIKO","SULEMA","SPARKLE","SOMER","SHEBA","SHAYNE","SHARICE","SHANEL","SHALON","SAGE","ROY","ROSIO","ROSELIA","RENAY","REMA","REENA","PORSCHE","PING","PEG","OZIE","ORETHA","ORALEE","ODA","NU","NGAN","NAKESHA","MILLY","MARYBELLE","MARLIN","MARIS","MARGRETT","MARAGARET","MANIE","LURLENE","LILLIA","LIESELOTTE","LAVELLE","LASHAUNDA","LAKEESHA","KEITH","KAYCEE","KALYN","JOYA","JOETTE","JENAE","JANIECE","ILLA","GRISEL","GLAYDS","GENEVIE","GALA","FREDDA","FRED","ELMER","ELEONOR","DEBERA","DEANDREA","DAN","CORRINNE","CORDIA","CONTESSA","COLENE","CLEOTILDE","CHARLOTT","CHANTAY","CECILLE","BEATRIS","AZALEE","ARLEAN","ARDATH","ANJELICA","ANJA","ALFREDIA","ALEISHA","ADAM","ZADA","YUONNE","XIAO","WILLODEAN","WHITLEY","VENNIE","VANNA","TYISHA","TOVA","TORIE","TONISHA","TILDA","TIEN","TEMPLE","SIRENA","SHERRIL","SHANTI","SHAN","SENAIDA","SAMELLA","ROBBYN","RENDA","REITA","PHEBE","PAULITA","NOBUKO","NGUYET","NEOMI","MOON","MIKAELA","MELANIA","MAXIMINA","MARG","MAISIE","LYNNA","LILLI","LAYNE","LASHAUN","LAKENYA","LAEL","KIRSTIE","KATHLINE","KASHA","KARLYN","KARIMA","JOVAN","JOSEFINE","JENNELL","JACQUI","JACKELYN","HYO","HIEN","GRAZYNA","FLORRIE","FLORIA","ELEONORA","DWANA","DORLA","DONG","DELMY","DEJA","DEDE","DANN","CRYSTA","CLELIA","CLARIS","CLARENCE","CHIEKO","CHERLYN","CHERELLE","CHARMAIN","CHARA","CAMMY","BEE","ARNETTE","ARDELLE","ANNIKA","AMIEE","AMEE","ALLENA","YVONE","YUKI","YOSHIE","YEVETTE","YAEL","WILLETTA","VONCILE","VENETTA","TULA","TONETTE","TIMIKA","TEMIKA","TELMA","TEISHA","TAREN","TA","STACEE","SHIN","SHAWNTA","SATURNINA","RICARDA","POK","PASTY","ONIE","NUBIA","MORA","MIKE","MARIELLE","MARIELLA","MARIANELA","MARDELL","MANY","LUANNA","LOISE","LISABETH","LINDSY","LILLIANA","LILLIAM","LELAH","LEIGHA","LEANORA","LANG","KRISTEEN","KHALILAH","KEELEY","KANDRA","JUNKO","JOAQUINA","JERLENE","JANI","JAMIKA","JAME","HSIU","HERMILA","GOLDEN","GENEVIVE","EVIA","EUGENA","EMMALINE","ELFREDA","ELENE","DONETTE","DELCIE","DEEANNA","DARCEY","CUC","CLARINDA","CIRA","CHAE","CELINDA","CATHERYN","CATHERIN","CASIMIRA","CARMELIA","CAMELLIA","BREANA","BOBETTE","BERNARDINA","BEBE","BASILIA","ARLYNE","AMAL","ALAYNA","ZONIA","ZENIA","YURIKO","YAEKO","WYNELL","WILLOW","WILLENA","VERNIA","TU","TRAVIS","TORA","TERRILYN","TERICA","TENESHA","TAWNA","TAJUANA","TAINA","STEPHNIE","SONA","SOL","SINA","SHONDRA","SHIZUKO","SHERLENE","SHERICE","SHARIKA","ROSSIE","ROSENA","RORY","RIMA","RIA","RHEBA","RENNA","PETER","NATALYA","NANCEE","MELODI","MEDA","MAXIMA","MATHA","MARKETTA","MARICRUZ","MARCELENE","MALVINA","LUBA","LOUETTA","LEIDA","LECIA","LAURAN","LASHAWNA","LAINE","KHADIJAH","KATERINE","KASI","KALLIE","JULIETTA","JESUSITA","JESTINE","JESSIA","JEREMY","JEFFIE","JANYCE","ISADORA","GEORGIANNE","FIDELIA","EVITA","EURA","EULAH","ESTEFANA","ELSY","ELIZABET","ELADIA","DODIE","DION","DIA","DENISSE","DELORAS","DELILA","DAYSI","DAKOTA","CURTIS","CRYSTLE","CONCHA","COLBY","CLARETTA","CHU","CHRISTIA","CHARLSIE","CHARLENA","CARYLON","BETTYANN","ASLEY","ASHLEA","AMIRA","AI","AGUEDA","AGNUS","YUETTE","VINITA","VICTORINA","TYNISHA","TREENA","TOCCARA","TISH","THOMASENA","TEGAN","SOILA","SHILOH","SHENNA","SHARMAINE","SHANTAE","SHANDI","SEPTEMBER","SARAN","SARAI","SANA","SAMUEL","SALLEY","ROSETTE","ROLANDE","REGINE","OTELIA","OSCAR","OLEVIA","NICHOLLE","NECOLE","NAIDA","MYRTA","MYESHA","MITSUE","MINTA","MERTIE","MARGY","MAHALIA","MADALENE","LOVE","LOURA","LOREAN","LEWIS","LESHA","LEONIDA","LENITA","LAVONE","LASHELL","LASHANDRA","LAMONICA","KIMBRA","KATHERINA","KARRY","KANESHA","JULIO","JONG","JENEVA","JAQUELYN","HWA","GILMA","GHISLAINE","GERTRUDIS","FRANSISCA","FERMINA","ETTIE","ETSUKO","ELLIS","ELLAN","ELIDIA","EDRA","DORETHEA","DOREATHA","DENYSE","DENNY","DEETTA","DAINE","CYRSTAL","CORRIN","CAYLA","CARLITA","CAMILA","BURMA","BULA","BUENA","BLAKE","BARABARA","AVRIL","AUSTIN","ALAINE","ZANA","WILHEMINA","WANETTA","VIRGIL","VI","VERONIKA","VERNON","VERLINE","VASILIKI","TONITA","TISA","TEOFILA","TAYNA","TAUNYA","TANDRA","TAKAKO","SUNNI","SUANNE","SIXTA","SHARELL","SEEMA","RUSSELL","ROSENDA","ROBENA","RAYMONDE","PEI","PAMILA","OZELL","NEIDA","NEELY","MISTIE","MICHA","MERISSA","MAURITA","MARYLN","MARYETTA","MARSHALL","MARCELL","MALENA","MAKEDA","MADDIE","LOVETTA","LOURIE","LORRINE","LORILEE","LESTER","LAURENA","LASHAY","LARRAINE","LAREE","LACRESHA","KRISTLE","KRISHNA","KEVA","KEIRA","KAROLE","JOIE","JINNY","JEANNETTA","JAMA","HEIDY","GILBERTE","GEMA","FAVIOLA","EVELYNN","ENDA","ELLI","ELLENA","DIVINA","DAGNY","COLLENE","CODI","CINDIE","CHASSIDY","CHASIDY","CATRICE","CATHERINA","CASSEY","CAROLL","CARLENA","CANDRA","CALISTA","BRYANNA","BRITTENY","BEULA","BARI","AUDRIE","AUDRIA","ARDELIA","ANNELLE","ANGILA","ALONA","ALLYN","DOUGLAS","ROGER","JONATHAN","RALPH","NICHOLAS","BENJAMIN","BRUCE","HARRY","WAYNE","STEVE","HOWARD","ERNEST","PHILLIP","TODD","CRAIG","ALAN","PHILIP","EARL","DANNY","BRYAN","STANLEY","LEONARD","NATHAN","MANUEL","RODNEY","MARVIN","VINCENT","JEFFERY","JEFF","CHAD","JACOB","ALFRED","BRADLEY","HERBERT","FREDERICK","EDWIN","DON","RICKY","RANDALL","BARRY","BERNARD","LEROY","MARCUS","THEODORE","CLIFFORD","MIGUEL","JIM","TOM","CALVIN","BILL","LLOYD","DEREK","WARREN","DARRELL","JEROME","FLOYD","ALVIN","TIM","GORDON","GREG","JORGE","DUSTIN","PEDRO","DERRICK","ZACHARY","HERMAN","GLEN","HECTOR","RICARDO","RICK","BRENT","RAMON","GILBERT","MARC","REGINALD","RUBEN","NATHANIEL","RAFAEL","EDGAR","MILTON","RAUL","BEN","CHESTER","DUANE","FRANKLIN","BRAD","RON","ROLAND","ARNOLD","HARVEY","JARED","ERIK","DARRYL","NEIL","JAVIER","FERNANDO","CLINTON","TED","MATHEW","TYRONE","DARREN","LANCE","KURT","ALLAN","NELSON","GUY","CLAYTON","HUGH","MAX","DWAYNE","DWIGHT","ARMANDO","FELIX","EVERETT","IAN","WALLACE","KEN","BOB","ALFREDO","ALBERTO","DAVE","IVAN","BYRON","ISAAC","MORRIS","CLIFTON","WILLARD","ROSS","ANDY","SALVADOR","KIRK","SERGIO","SETH","KENT","TERRANCE","EDUARDO","TERRENCE","ENRIQUE","WADE","STUART","FREDRICK","ARTURO","ALEJANDRO","NICK","LUTHER","WENDELL","JEREMIAH","JULIUS","OTIS","TREVOR","OLIVER","LUKE","HOMER","GERARD","DOUG","KENNY","HUBERT","LYLE","MATT","ALFONSO","ORLANDO","REX","CARLTON","ERNESTO","NEAL","PABLO","LORENZO","OMAR","WILBUR","GRANT","HORACE","RODERICK","ABRAHAM","WILLIS","RICKEY","ANDRES","CESAR","JOHNATHAN","MALCOLM","RUDOLPH","DAMON","KELVIN","PRESTON","ALTON","ARCHIE","MARCO","WM","PETE","RANDOLPH","GARRY","GEOFFREY","JONATHON","FELIPE","GERARDO","ED","DOMINIC","DELBERT","COLIN","GUILLERMO","EARNEST","LUCAS","BENNY","SPENCER","RODOLFO","MYRON","EDMUND","GARRETT","SALVATORE","CEDRIC","LOWELL","GREGG","SHERMAN","WILSON","SYLVESTER","ROOSEVELT","ISRAEL","JERMAINE","FORREST","WILBERT","LELAND","SIMON","CLARK","IRVING","BRYANT","OWEN","RUFUS","WOODROW","KRISTOPHER","MACK","LEVI","MARCOS","GUSTAVO","JAKE","LIONEL","GILBERTO","CLINT","NICOLAS","ISMAEL","ORVILLE","ERVIN","DEWEY","AL","WILFRED","JOSH","HUGO","IGNACIO","CALEB","TOMAS","SHELDON","ERICK","STEWART","DOYLE","DARREL","ROGELIO","TERENCE","SANTIAGO","ALONZO","ELIAS","BERT","ELBERT","RAMIRO","CONRAD","NOAH","GRADY","PHIL","CORNELIUS","LAMAR","ROLANDO","CLAY","PERCY","DEXTER","BRADFORD","DARIN","AMOS","MOSES","IRVIN","SAUL","ROMAN","RANDAL","TIMMY","DARRIN","WINSTON","BRENDAN","ABEL","DOMINICK","BOYD","EMILIO","ELIJAH","DOMINGO","EMMETT","MARLON","EMANUEL","JERALD","EDMOND","EMIL","DEWAYNE","WILL","OTTO","TEDDY","REYNALDO","BRET","JESS","TRENT","HUMBERTO","EMMANUEL","STEPHAN","VICENTE","LAMONT","GARLAND","MILES","EFRAIN","HEATH","RODGER","HARLEY","ETHAN","ELDON","ROCKY","PIERRE","JUNIOR","FREDDY","ELI","BRYCE","ANTOINE","STERLING","CHASE","GROVER","ELTON","CLEVELAND","DYLAN","CHUCK","DAMIAN","REUBEN","STAN","AUGUST","LEONARDO","JASPER","RUSSEL","ERWIN","BENITO","HANS","MONTE","BLAINE","ERNIE","CURT","QUENTIN","AGUSTIN","MURRAY","JAMAL","ADOLFO","HARRISON","TYSON","BURTON","BRADY","ELLIOTT","WILFREDO","BART","JARROD","VANCE","DENIS","DAMIEN","JOAQUIN","HARLAN","DESMOND","ELLIOT","DARWIN","GREGORIO","BUDDY","XAVIER","KERMIT","ROSCOE","ESTEBAN","ANTON","SOLOMON","SCOTTY","NORBERT","ELVIN","WILLIAMS","NOLAN","ROD","QUINTON","HAL","BRAIN","ROB","ELWOOD","KENDRICK","DARIUS","MOISES","FIDEL","THADDEUS","CLIFF","MARCEL","JACKSON","RAPHAEL","BRYON","ARMAND","ALVARO","JEFFRY","DANE","JOESPH","THURMAN","NED","RUSTY","MONTY","FABIAN","REGGIE","MASON","GRAHAM","ISAIAH","VAUGHN","GUS","LOYD","DIEGO","ADOLPH","NORRIS","MILLARD","ROCCO","GONZALO","DERICK","RODRIGO","WILEY","RIGOBERTO","ALPHONSO","TY","NOE","VERN","REED","JEFFERSON","ELVIS","BERNARDO","MAURICIO","HIRAM","DONOVAN","BASIL","RILEY","NICKOLAS","MAYNARD","SCOT","VINCE","QUINCY","EDDY","SEBASTIAN","FEDERICO","ULYSSES","HERIBERTO","DONNELL","COLE","DAVIS","GAVIN","EMERY","WARD","ROMEO","JAYSON","DANTE","CLEMENT","COY","MAXWELL","JARVIS","BRUNO","ISSAC","DUDLEY","BROCK","SANFORD","CARMELO","BARNEY","NESTOR","STEFAN","DONNY","ART","LINWOOD","BEAU","WELDON","GALEN","ISIDRO","TRUMAN","DELMAR","JOHNATHON","SILAS","FREDERIC","DICK","IRWIN","MERLIN","CHARLEY","MARCELINO","HARRIS","CARLO","TRENTON","KURTIS","HUNTER","AURELIO","WINFRED","VITO","COLLIN","DENVER","CARTER","LEONEL","EMORY","PASQUALE","MOHAMMAD","MARIANO","DANIAL","LANDON","DIRK","BRANDEN","ADAN","BUFORD","GERMAN","WILMER","EMERSON","ZACHERY","FLETCHER","JACQUES","ERROL","DALTON","MONROE","JOSUE","EDWARDO","BOOKER","WILFORD","SONNY","SHELTON","CARSON","THERON","RAYMUNDO","DAREN","HOUSTON","ROBBY","LINCOLN","GENARO","BENNETT","OCTAVIO","CORNELL","HUNG","ARRON","ANTONY","HERSCHEL","GIOVANNI","GARTH","CYRUS","CYRIL","RONNY","LON","FREEMAN","DUNCAN","KENNITH","CARMINE","ERICH","CHADWICK","WILBURN","RUSS","REID","MYLES","ANDERSON","MORTON","JONAS","FOREST","MITCHEL","MERVIN","ZANE","RICH","JAMEL","LAZARO","ALPHONSE","RANDELL","MAJOR","JARRETT","BROOKS","ABDUL","LUCIANO","SEYMOUR","EUGENIO","MOHAMMED","VALENTIN","CHANCE","ARNULFO","LUCIEN","FERDINAND","THAD","EZRA","ALDO","RUBIN","ROYAL","MITCH","EARLE","ABE","WYATT","MARQUIS","LANNY","KAREEM","JAMAR","BORIS","ISIAH","EMILE","ELMO","ARON","LEOPOLDO","EVERETTE","JOSEF","ELOY","RODRICK","REINALDO","LUCIO","JERROD","WESTON","HERSHEL","BARTON","PARKER","LEMUEL","BURT","JULES","GIL","ELISEO","AHMAD","NIGEL","EFREN","ANTWAN","ALDEN","MARGARITO","COLEMAN","DINO","OSVALDO","LES","DEANDRE","NORMAND","KIETH","TREY","NORBERTO","NAPOLEON","JEROLD","FRITZ","ROSENDO","MILFORD","CHRISTOPER","ALFONZO","LYMAN","JOSIAH","BRANT","WILTON","RICO","JAMAAL","DEWITT","BRENTON","OLIN","FOSTER","FAUSTINO","CLAUDIO","JUDSON","GINO","EDGARDO","ALEC","TANNER","JARRED","DONN","TAD","PRINCE","PORFIRIO","ODIS","LENARD","CHAUNCEY","TOD","MEL","MARCELO","KORY","AUGUSTUS","KEVEN","HILARIO","BUD","SAL","ORVAL","MAURO","ZACHARIAH","OLEN","ANIBAL","MILO","JED","DILLON","AMADO","NEWTON","LENNY","RICHIE","HORACIO","BRICE","MOHAMED","DELMER","DARIO","REYES","MAC","JONAH","JERROLD","ROBT","HANK","RUPERT","ROLLAND","KENTON","DAMION","ANTONE","WALDO","FREDRIC","BRADLY","KIP","BURL","WALKER","TYREE","JEFFEREY","AHMED","WILLY","STANFORD","OREN","NOBLE","MOSHE","MIKEL","ENOCH","BRENDON","QUINTIN","JAMISON","FLORENCIO","DARRICK","TOBIAS","HASSAN","GIUSEPPE","DEMARCUS","CLETUS","TYRELL","LYNDON","KEENAN","WERNER","GERALDO","COLUMBUS","CHET","BERTRAM","MARKUS","HUEY","HILTON","DWAIN","DONTE","TYRON","OMER","ISAIAS","HIPOLITO","FERMIN","ADALBERTO","BO","BARRETT","TEODORO","MCKINLEY","MAXIMO","GARFIELD","RALEIGH","LAWERENCE","ABRAM","RASHAD","KING","EMMITT","DARON","SAMUAL","MIQUEL","EUSEBIO","DOMENIC","DARRON","BUSTER","WILBER","RENATO","JC","HOYT","HAYWOOD","EZEKIEL","CHAS","FLORENTINO","ELROY","CLEMENTE","ARDEN","NEVILLE","EDISON","DESHAWN","NATHANIAL","JORDON","DANILO","CLAUD","SHERWOOD","RAYMON","RAYFORD","CRISTOBAL","AMBROSE","TITUS","HYMAN","FELTON","EZEQUIEL","ERASMO","STANTON","LONNY","LEN","IKE","MILAN","LINO","JAROD","HERB","ANDREAS","WALTON","RHETT","PALMER","DOUGLASS","CORDELL","OSWALDO","ELLSWORTH","VIRGILIO","TONEY","NATHANAEL","DEL","BENEDICT","MOSE","JOHNSON","ISREAL","GARRET","FAUSTO","ASA","ARLEN","ZACK","WARNER","MODESTO","FRANCESCO","MANUAL","GAYLORD","GASTON","FILIBERTO","DEANGELO","MICHALE","GRANVILLE","WES","MALIK","ZACKARY","TUAN","ELDRIDGE","CRISTOPHER","CORTEZ","ANTIONE","MALCOM","LONG","KOREY","JOSPEH","COLTON","WAYLON","VON","HOSEA","SHAD","SANTO","RUDOLF","ROLF","REY","RENALDO","MARCELLUS","LUCIUS","KRISTOFER","BOYCE","BENTON","HAYDEN","HARLAND","ARNOLDO","RUEBEN","LEANDRO","KRAIG","JERRELL","JEROMY","HOBERT","CEDRICK","ARLIE","WINFORD","WALLY","LUIGI","KENETH","JACINTO","GRAIG","FRANKLYN","EDMUNDO","SID","PORTER","LEIF","JERAMY","BUCK","WILLIAN","VINCENZO","SHON","LYNWOOD","JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO"

Problem22/problem22.ml

+module A = struct
+  
+  open Str
+
+  let filename = "names.txt";;
+
+  let elements_in filenames =
+    let ic = open_in filename in
+    try
+      let line = input_line ic in
+      split (regexp ",") line
+    with e ->
+      close_in_noerr ic;
+      raise e
+  ;;
+
+  let quoted elem = global_replace (regexp "\"") "" elem;;
+
+  let calc_score names =
+    let name_score str =
+      let max_idx = (String.length str) - 1 in
+      let score_of_char c = (int_of_char c) - (int_of_char 'A') + 1 in
+      let rec score ret = function
+        | (-1) -> ret
+        | n -> score ((score_of_char str.[n])+ret) (n-1)
+      in
+      score 0 max_idx
+    in
+    let rec calc_score ret nth = function
+      | [] -> ret
+      | n::ns ->
+          calc_score ((nth*(name_score n))::ret) (nth+1) ns
+    in
+    calc_score [] 1 names
+  ;;
+
+  let test () =
+    begin
+      let names = List.sort compare 
+        (List.map (fun x -> quoted x) (elements_in filename)) in
+      let scores = calc_score names in
+      List.map (fun x -> Printf.printf "%s " x) names;
+      Printf.printf "%d\n" (List.fold_left (+) 0 scores);
+      ();
+    end
+  ;;
+
+end
+
+let () = A.test ();;
+FILES[] =
+   problem23
+
+PROGRAM = problem23
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem23/problem23.ml

+module A = struct
+
+  let nums limit = 
+    let rec nums ret = function
+      | 0 -> ret
+      | n -> nums (n::ret) (n-1)
+    in
+    nums [] limit
+  ;;
+
+  let rec pow x = function
+    | 0 -> 1
+    | n -> x * (pow x (n-1))
+  ;;
+
+  let primes limit =
+    let sift n l = List.filter (fun x -> (x mod n) <> 0) l in
+    let rec sieve ret nums =
+      match ret, nums with
+      | [], x::xs -> sieve [x] (sift x xs)
+      | _, [] -> ret
+      | r::rs, xs when (r*r) > List.hd (List.rev xs) ->
+           List.rev_append (r::rs) xs
+      | ret, x::xs -> sieve (x::ret) (sift x xs)
+    in
+    sieve [] (List.tl (nums limit))
+  ;;
+
+  let dividors ps n =
+    let rec n_div ret d x =
+      if (x mod d) = 0 then n_div (List.map (fun x -> x+1) (0::ret)) d (x/d)
+      else (x, List.map (fun n -> pow d n) (0::ret))
+    in
+    let rec div_list ret ps n =
+      match ps, n with
+      | [], _ | _, 0 | _, 1 -> ret
+      | p::ps, n ->
+          let (rest, divs) = n_div [] p n in
+          div_list (divs::ret) ps rest
+    in
+    div_list [] ps n
+  ;;
+
+  let rec prod_divs divs =
+    let rec cross_divs ret xs1 xs2 =
+      match xs1 with
+      | [] -> ret
+      | x::xs -> cross_divs ((List.map (fun n -> n*x) xs2) @ ret) xs xs2
+    in
+    match divs with
+    | [] -> []
+    | [ds] -> List.tl (List.sort (fun x y -> y - x) ds)
+    | ds1::ds2::dss -> prod_divs ((cross_divs [] ds1 ds2)::dss)
+  ;;
+
+  let limit = 28123;;
+  let prime = primes limit;;
+
+  let abundunts limit = 
+    let is_abundant num = (List.fold_left (+) 0 (prod_divs (dividors prime num))) > num in
+    List.filter (fun x -> is_abundant x) (nums limit)
+  ;;
+
+  let roller limit = 
+    let abds = abundunts limit in
+    let rec mem n = function
+      | [] -> false
+      | x::xs when x > n -> false
+      | x::xs -> if x = n then true else mem n xs
+    in
+    let rec roller ret = function
+      | [] -> ret
+      | x::xs -> 
+          if List.exists (fun e -> mem (x - e) abds) abds
+          then roller ret xs
+          else roller (x::ret) xs
+    in
+    roller [] (nums limit)
+  ;;
+  
+  let test () =
+    begin
+      let result = roller limit in
+      let _ = List.map (fun x -> Printf.printf "%d " x) result in
+      Printf.printf "\n";
+      let _ = Printf.printf "%d\n" (List.fold_left (+) 0 result) in
+      ();
+    end
+  ;;
+
+end
+
+let _ = A.test ();;
+FILES[] =
+   problem24
+
+PROGRAM = problem24
+# OCAML_LIBS += 
+# OCAML_CLIBS +=
+# OCAML_OTHER_LIBS +=
+# OCAML_LIB_FLAGS +=
+
+.DEFAULT: $(OCamlProgram $(PROGRAM), $(FILES))
+
+clean:
+  rm -f $(filter-proper-targets $(ls R, .))

Problem24/problem24.ml

+module A = struct
+
+  (* this solution do now work to be stack overflow *)
+
+  let nums limit =
+    let rec nums ret = function
+      | 0 -> ret
+      | n -> nums (n::ret) (n-1)
+    in
+    nums [] limit
+  ;;
+
+
+  let rec pow x = function
+    | 0 -> 1
+    | n -> x * (pow x (n-1))
+  ;;
+
+  let primes limit =
+    let sift n l = List.filter (fun x -> (x mod n) <> 0) l in
+    let rec sieve ret l =
+      match ret, l with
+      | _, [] -> List.rev ret
+      | [], x::xs -> sieve [x] (sift x xs)
+      | r::rs, xs when (r*r) > (List.hd (List.rev xs)) ->
+          List.rev_append (r::rs) xs
+      | ret, x::xs -> sieve (x::ret) (sift x xs)
+    in
+    sieve [] (List.tl (nums limit))
+  ;;
+
+
+  let d2n ds =
+    let len = List.length ds in
+    List.fold_left2 (fun x y z -> x+y*(pow 10 (z-1))) 0 ds (List.rev (nums len))
+  ;;
+
+
+  let perm n l =
+    let remove x xs =
+      let rec remove ret x = function
+        | [] -> ret
+        | y::ys -> 
+            if x = y then (List.rev ret) @ ys
+            else remove (y::ret) x ys
+      in
+      remove [] x xs
+    in
+    let rec perm n xs a b =
+      if n = 0 then a::b
+      else List.fold_right (fun x y -> perm (n-1) (remove x xs) (x::a) y) xs b
+    in
+    List.sort (fun x y -> x - y) (List.map d2n (perm n l [] []))
+  ;;