     case InvalidArrangement
     case InvalidWord(x: Int, y: Int, word: String)
     case Valid(solution: Solution)
+    
+    static func invalid(withWord word: Word) -> ValidationResponse {
+        return .InvalidWord(x: word.x, y: word.y, word: word.word)
+    }
 }
 
 struct Solver {

        return filled.count == 0 ? nil : filled
    }
    
    private func wordAt(x: Int, y: Int, string: String, horizontal: Bool) -> Word {
        assert(!string.isEmpty)
        
        if horizontal && x > 0 && board.isFilledAt(x - 1, y) {

            end += 1
            collect()
        }
        if chars.count < 2 {
            return nil
        }
        let word = horizontal ? Word(word: String(chars), x: start, y: y, horizontal: horizontal)
            : Word(word: String(chars), x: x, y: start, horizontal: horizontal)
        return (word, dictionary.lookup(word.word))
    }
    
    private func calculateScore(word: WordRepresentation, blanks: [(x: Int, y: Int)]) -> Int {
