let max_common l =
  let pred char n s =
    String.length s >= (n+1) && s.[n] = char
  in
  let in_all c n = List.for_all (pred c n) l in
  match l with
    [] -> None
  | [s] -> Some s
  | h :: q ->
      let len = String.length h in
      let rec iter n =
        if n < len then
          if in_all h.[n] n then
            iter (n+1)
          else
            n
        else
          len
      in
      let maxlen = iter 0 in
      Some (String.sub h 0 maxlen)