anchor.diff:    sw.Stop()
     Console.WriteLine(sw.Elapsed)
     0 // return an integer exit code
  -    +    
  
positive.code:            || horizontalBricksAll
                |> Seq.tryFind (fun elem -> 
                       (match generateRight elem with
                        | Some (a, b) when checkVacancy a -> 
                          solveDFS (generateState elem b) (elem, Right) 
                            (depth + 1)
                        | _ -> false) || (match generateLeft elem with
                                          | Some (a, b) when checkVacancy a -> 
                                            solveDFS (generateState elem b) 
                                              (elem, Left) (depth + 1)
                                          | _ -> false))
                |> Option.isSome || verticalBricksAll
                                    |> Seq.tryFind (fun elem -> 
                                           (match generateUp elem with
                                            | Some (a, b) when checkVacancy a -> 
                                              solveDFS (generateState elem b) 
                                                (elem, Up) (depth + 1)
                                            | _ -> false) || (match generateDown 
                                                                      elem with
                                                              | Some (a, b) when checkVacancy 
                                                                                   a -> 
                                                                solveDFS 
                                                                  (generateState 
                                                                     elem b) 
  
negative.code:       let (_, length) = brickInfo.[i]
        let (rowID, columnID) = currentState.[i]
        if columnID + length >= columnNum then None
        else Some((rowID, columnID + length), (rowID, columnID + 1))
      let generateLeft i = 
        let (_, length) = brickInfo.[i]
        let (rowID, columnID) = currentState.[i]
        if columnID = 0 then None
        else Some((rowID, columnID - 1), (rowID, columnID - 1))
      let generateUp i = 
        let (_, length) = brickInfo.[i]
        let (rowID, columnID) = currentState.[i]
        if rowID + length >= rowNum then None
        else Some((rowID + length, columnID), (rowID + 1, columnID))
      let generateDown i = 
        let (_, length) = brickInfo.[i]
        let (rowID, columnID) = currentState.[i]
        if rowID = 0 then None
        else Some((rowID - 1, columnID), (rowID - 1, columnID))
      if depth < 7 && not (isDuplicated mySet) 
         && (let (_, columnLeft) = currentState.[0]
             [|columnLeft + redLength..columnNum - 1|]
  