{"id":678,"date":"2026-01-27T19:33:20","date_gmt":"2026-01-27T19:33:20","guid":{"rendered":"https:\/\/camilo.matajira.com\/?p=678"},"modified":"2026-01-27T19:33:20","modified_gmt":"2026-01-27T19:33:20","slug":"sudoku-solver-in-rust-part-2","status":"publish","type":"post","link":"https:\/\/camilo.matajira.com\/?p=678","title":{"rendered":"Sudoku solver in Rust (part 2)"},"content":{"rendered":"\n<p>This is the follow up to <a href=\"https:\/\/camilo.matajira.com\/?p=673.\">https:\/\/camilo.matajira.com\/?p=673.<\/a><br>Back then I struggled to implement my &#8220;usual&#8221; solution to sudoku puzzles. My key pain point was working with a struct (a Cell) that has &#8220;references&#8221; to itself (next Cell) and to the head of the &#8220;linked list&#8221;.<\/p>\n\n\n\n<p>Approaching the problem like this worked in Java, Python and Javascript (if I recall correctly) but not in Rust. To satisfy the compiler, I had to keep the state in a 2d array (outside the Cells), and just use the Cells as &#8220;relatively&#8221; dumb structs that are chained together to transverse easily the puzzle.<\/p>\n\n\n\n<p>With this modification, the code compiled. I also added command line argument parsing with clap, and parsing of puzzles via files or stding with serde_json.<\/p>\n\n\n\n<p>The code is the following:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>use std::collections::HashSet;\nconst SUDOKU_MAX_NUMBER: usize = 9;\n\nuse clap::Parser;\nuse serde_json;\nuse std::fs;\nuse std::io::Read;\n\n#&#91;derive(Parser)&#93;\nstruct Cli {\n    input_file: Option&lt;String>,\n}\n\nfn main() {\n    let cli = Cli::parse();\n\n    match cli.input_file {\n        Some(ref input_file) => {\n            process_input_file(input_file);\n        }\n        None => {\n            process_stdin();\n        }\n    }\n}\n\nfn solve(initial_conditions: &amp;mut [&#91;usize; 9&#93;; 9]) {\n    let mut cell_00 = initialize_cells(&amp;initial_conditions);\n    let result = cell_00.solve(initial_conditions);\n    match result {\n        Ok(_) => {\n            for i in initial_conditions {\n                let serialized_row = serde_json::to_string(&amp;i).unwrap();\n                println!(\"{}\", serialized_row);\n            }\n        }\n        Err(error) => {\n            println!(\"{}\", error);\n        }\n    }\n}\n\nfn process_input_file(input_file: &amp;String) {\n    let buffer_result = fs::read_to_string(input_file);\n    match buffer_result {\n        Err(_) => {\n            eprintln!(\"Could not read file: {}\", input_file);\n            std::process::exit(1);\n        }\n        Ok(buffer) => {\n            let mut initial_conditions = parse_initial_conditions(buffer);\n            solve(&amp;mut initial_conditions);\n        }\n    }\n}\n\nfn process_stdin() {\n    let mut buffer_try = String::new();\n    std::io::stdin()\n        .read_to_string(&amp;mut buffer_try)\n        .expect(\"paila\");\n    let mut initial_conditions = parse_initial_conditions(buffer_try);\n    solve(&amp;mut initial_conditions);\n}\n\nfn parse_initial_conditions(initial_text: String) -> [&#91;usize; 9&#93;; 9] {\n    let parsed: Result&lt;[&#91;usize; 9&#93;; 9], serde_json::Error> = serde_json::from_str(&amp;initial_text);\n    match parsed {\n        Ok(initial_conditions) => return initial_conditions,\n        Err(error) => {\n            eprintln!(\"Problems parsing the Sudoku puzzle\");\n            let initial_text = \"[\n&#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n&#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n&#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n&#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n&#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n&#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n&#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n&#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n&#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;\n]\";\n            eprintln!(\"Input file or stdin should have this format:\");\n            eprintln!(\"{}\", initial_text);\n            eprintln!(\"Parser error: {}\", error);\n            std::process::exit(1);\n        }\n    };\n}\n\nstruct Cell {\n    i: usize,\n    j: usize,\n    next: Option&lt;Box&lt;Cell>>,\n    is_fixed: bool,\n}\n\nfn get_set_from_column(i: usize, sudoku: &amp;[&#91;usize; 9&#93;; 9]) -> Result&lt;HashSet&lt;usize>, String> {\n    let mut answer = HashSet::new();\n    if i > SUDOKU_MAX_NUMBER - 1 {\n        return Err(\"i must be between 0 and 8\".into());\n    } else {\n        for j in 0..SUDOKU_MAX_NUMBER {\n            answer.insert(sudoku&#91;j&#93;&#91;i&#93;);\n        }\n        return Ok(answer);\n    }\n}\nfn get_set_from_row(j: usize, sudoku: &amp;[&#91;usize; 9&#93;; 9]) -> Result&lt;HashSet&lt;usize>, String> {\n    let mut answer = HashSet::new();\n    if j > SUDOKU_MAX_NUMBER - 1 {\n        return Err(\"i must be between 0 and 8\".into());\n    } else {\n        for i in 0..SUDOKU_MAX_NUMBER {\n            answer.insert(sudoku&#91;j&#93;&#91;i&#93;);\n        }\n        return Ok(answer);\n    }\n}\n\nfn get_set_from_sub_matrix_ij(\n    i: usize,\n    j: usize,\n    sudoku: &amp;[&#91;usize; 9&#93;; 9],\n) -> Result&lt;HashSet&lt;usize>, String> {\n    let mut answer = HashSet::new();\n    if i > SUDOKU_MAX_NUMBER - 1 || j > SUDOKU_MAX_NUMBER - 1 {\n        return Err(\"only valid for the head\".into());\n    } else {\n        let original_quadrant = get_quadrant_from_ij(i, j);\n        for x in 0..SUDOKU_MAX_NUMBER {\n            for y in 0..SUDOKU_MAX_NUMBER {\n                if get_quadrant_from_ij(x, y) == original_quadrant {\n                    answer.insert(sudoku&#91;x&#93;&#91;y&#93;);\n                }\n            }\n        }\n        return Ok(answer);\n    }\n}\nfn is_a_good_candidate_for_column(i: usize, candidate: usize, sudoku: &amp;[&#91;usize; 9&#93;; 9]) -> bool {\n    let values_column = get_set_from_column(i, &amp;sudoku).unwrap();\n    !values_column.contains(&amp;candidate)\n}\n\nfn is_a_good_candidate_for_row(j: usize, candidate: usize, sudoku: &amp;[&#91;usize; 9&#93;; 9]) -> bool {\n    let values_row = get_set_from_row(j, &amp;sudoku).unwrap();\n    !values_row.contains(&amp;candidate)\n}\nfn is_a_good_candidate_for_sub_matrix(\n    i: usize,\n    j: usize,\n    candidate: usize,\n    sudoku: &amp;[&#91;usize; 9&#93;; 9],\n) -> bool {\n    let values_quadrant_ij = get_set_from_sub_matrix_ij(i, j, &amp;sudoku).unwrap();\n    !values_quadrant_ij.contains(&amp;candidate)\n}\n\nimpl Cell {\n    fn solve(&amp;mut self, sudoku: &amp;mut [&#91;usize; 9&#93;; 9]) -> Result&lt;String, String> {\n        match self.next {\n            Some(_) => {}\n            None => return Ok(\"Solved\".into()),\n        }\n        if self.is_fixed {\n            let next_cell_solve_result = self.solve_next(sudoku);\n            match next_cell_solve_result {\n                Ok(solution) => return Ok(solution),\n                Err(e) => return Err(e),\n            }\n        } else {\n            for candidate in 1..SUDOKU_MAX_NUMBER + 1 {\n                if is_a_good_candidate_for_column(self.j, candidate, sudoku)\n                    &amp;&amp; is_a_good_candidate_for_row(self.i, candidate, sudoku)\n                    &amp;&amp; is_a_good_candidate_for_sub_matrix(self.i, self.j, candidate, sudoku)\n                {\n                    sudoku&#91;self.i&#93;&#91;self.j&#93; = candidate;\n                    let next_cell_solve_result = self.solve_next(sudoku);\n                    match next_cell_solve_result {\n                        Ok(solution) => return Ok(solution),\n                        Err(_) => {\n\n                            \/\/ println!(\n                            \/\/     \"{}{} candidate {} is bad, backtracking\",\n                            \/\/     self.i, self.j, candidate\n                            \/\/ );\n                        }\n                    }\n                } else {\n                    continue;\n                }\n            }\n            sudoku&#91;self.i&#93;&#91;self.j&#93; = 0;\n            \/\/ println!(\"{}{} ran out of options\", self.i, self.j);\n            return Err(\"Go back!\".into());\n        }\n    }\n    fn solve_next(&amp;mut self, sudoku: &amp;mut [&#91;usize; 9&#93;; 9]) -> Result&lt;String, String> {\n        self.next.as_mut().unwrap().solve(sudoku)\n    }\n}\n\n#&#91;derive(PartialEq, Debug)&#93;\nenum SubMatrixQuadrant {\n    Quadrant1,\n    Quadrant2,\n    Quadrant3,\n    Quadrant4,\n    Quadrant5,\n    Quadrant6,\n    Quadrant7,\n    Quadrant8,\n    Quadrant9,\n}\n\nfn get_quadrant_from_ij(x: usize, y: usize) -> SubMatrixQuadrant {\n    match (x, y) {\n        (x, y) if x &lt; 3 &amp;&amp; y &lt; 3 => SubMatrixQuadrant::Quadrant1,\n        (x, y) if x &lt; 3 &amp;&amp; y >= 3 &amp;&amp; y &lt; 6 => SubMatrixQuadrant::Quadrant2,\n        (x, y) if x &lt; 3 &amp;&amp; y >= 6 => SubMatrixQuadrant::Quadrant3,\n        (x, y) if x >= 3 &amp;&amp; x &lt; 6 &amp;&amp; y &lt; 3 => SubMatrixQuadrant::Quadrant4,\n        (x, y) if x >= 3 &amp;&amp; x &lt; 6 &amp;&amp; y >= 3 &amp;&amp; y &lt; 6 => SubMatrixQuadrant::Quadrant5,\n        (x, y) if x >= 3 &amp;&amp; x &lt; 6 &amp;&amp; y >= 6 => SubMatrixQuadrant::Quadrant6,\n        (x, y) if x >= 6 &amp;&amp; y &lt; 3 => SubMatrixQuadrant::Quadrant7,\n        (x, y) if x >= 6 &amp;&amp; y >= 3 &amp;&amp; y &lt; 6 => SubMatrixQuadrant::Quadrant8,\n        (x, y) if x >= 6 &amp;&amp; y >= 6 => SubMatrixQuadrant::Quadrant9,\n        (_, _) => SubMatrixQuadrant::Quadrant9,\n    }\n}\nfn initialize_cells(&amp;initial_conditions: &amp;[&#91;usize; 9&#93;; 9]) -> Box&lt;Cell> {\n    let mut cell_00 = Box::new(Cell {\n        i: 0,\n        j: 0,\n        next: None,\n        is_fixed: initial_conditions&#91;0&#93;&#91;0&#93; > 0,\n    });\n    let mut previous_cell = &amp;mut cell_00;\n    for (i, row_i) in initial_conditions.iter().enumerate() {\n        for (j, value_j) in row_i.iter().enumerate() {\n            if i == 0 &amp;&amp; j == 0 {\n                continue;\n            }\n            let is_fixed = *value_j > (0 as usize);\n            let new_cell = Box::new(Cell {\n                i: i,\n                j: j,\n                is_fixed: is_fixed,\n                next: None,\n            });\n            previous_cell.next = Some(new_cell);\n            previous_cell = previous_cell.next.as_mut().unwrap();\n        }\n    }\n    return cell_00;\n}\n\n#&#91;cfg(test)&#93;\nmod tests {\n    use super::*;\n\n    #&#91;test&#93;\n    fn test_cell() {\n        let test_1 = Cell {\n            i: 0,\n            j: 1,\n            next: None,\n            is_fixed: false,\n        };\n        assert_eq!(test_1.i, 0);\n        assert_eq!(test_1.j, 1);\n    }\n    #&#91;test&#93;\n    fn test_cell_next_cell() {\n        let test_2 = Box::new(Cell {\n            i: 0,\n            j: 1,\n            next: None,\n            is_fixed: false,\n        });\n        let test_1 = Box::new(Cell {\n            i: 0,\n            j: 0,\n            next: Some(test_2),\n            is_fixed: false,\n        });\n        let Some(_next) = test_1.next else { panic!() };\n    }\n    #&#91;test&#93;\n    fn test_initialize() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n        let cell_00 = initialize_cells(&amp;initial_conditions);\n        assert_eq!(cell_00.i, 0);\n        assert_eq!(cell_00.j, 0);\n        assert_eq!(cell_00.is_fixed, true);\n\n        let cell_01 = cell_00.next.unwrap();\n        assert_eq!(cell_01.i, 0);\n        assert_eq!(cell_01.j, 1);\n        assert_eq!(cell_01.is_fixed, true);\n\n        let cell_02 = cell_01.next.unwrap();\n        assert_eq!(cell_02.i, 0);\n        assert_eq!(cell_02.j, 2);\n        assert_eq!(cell_02.is_fixed, false);\n\n        let cell_03 = cell_02.next.unwrap();\n        let cell_04 = cell_03.next.unwrap();\n        let cell_05 = cell_04.next.unwrap();\n        let cell_06 = cell_05.next.unwrap();\n        let cell_07 = cell_06.next.unwrap();\n        let cell_08 = cell_07.next.unwrap();\n        let cell_10 = cell_08.next.unwrap();\n        assert_eq!(cell_10.i, 1);\n        assert_eq!(cell_10.j, 0);\n        assert_eq!(cell_10.is_fixed, true);\n    }\n\n    #&#91;test&#93;\n    fn test_get_set_from_column() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n        let answer = HashSet::from(&#91;5, 6, 0, 8, 4, 7, 0, 0, 0&#93;);\n        assert_eq!(answer, get_set_from_column(0, &amp;initial_conditions).unwrap());\n        let answer = HashSet::from(&#91;0, 0, 0, 3, 1, 6, 0, 5, 9&#93;);\n        assert_eq!(answer, get_set_from_column(8, &amp;initial_conditions).unwrap());\n    }\n    #&#91;test&#93;\n    fn test_get_set_from_row() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n\n        let answer = HashSet::from(&#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;);\n        assert_eq!(answer, get_set_from_row(0, &amp;initial_conditions).unwrap());\n    }\n    #&#91;test&#93;\n    fn test_get_quadrants() {\n        assert_eq!(SubMatrixQuadrant::Quadrant1, get_quadrant_from_ij(0, 0));\n        assert_eq!(SubMatrixQuadrant::Quadrant4, get_quadrant_from_ij(3, 0));\n        assert_eq!(SubMatrixQuadrant::Quadrant9, get_quadrant_from_ij(8, 8));\n        assert_eq!(SubMatrixQuadrant::Quadrant5, get_quadrant_from_ij(4, 4));\n    }\n    #&#91;test&#93;\n    fn test_get_set_from_sub_matrix_ij() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n\n        let answer = HashSet::from(&#91;5, 3, 0, 6, 0, 0, 0, 9, 8&#93;);\n        assert_eq!(\n            answer,\n            get_set_from_sub_matrix_ij(0, 0, &amp;initial_conditions).unwrap()\n        );\n        let answer = HashSet::from(&#91;8, 0, 0, 4, 0, 0, 7, 0, 0&#93;);\n        assert_eq!(\n            answer,\n            get_set_from_sub_matrix_ij(3, 0, &amp;initial_conditions).unwrap()\n        );\n        let answer = HashSet::from(&#91;2, 8, 0, 0, 0, 5, 0, 7, 9&#93;);\n        assert_eq!(\n            answer,\n            get_set_from_sub_matrix_ij(7, 7, &amp;initial_conditions).unwrap()\n        );\n        let answer = HashSet::from(&#91;0, 6, 0, 8, 0, 3, 0, 2, 0&#93;);\n        assert_eq!(\n            answer,\n            get_set_from_sub_matrix_ij(3, 3, &amp;initial_conditions).unwrap()\n        );\n    }\n    #&#91;test&#93;\n    fn test_is_a_good_candidate_for_column() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n\n        assert_eq!(\n            is_a_good_candidate_for_column(0, 5, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_column(0, 9, &amp;initial_conditions),\n            true\n        );\n        assert_eq!(\n            is_a_good_candidate_for_column(0, 3, &amp;initial_conditions),\n            true\n        );\n        assert_eq!(\n            is_a_good_candidate_for_column(8, 9, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_column(7, 7, &amp;initial_conditions),\n            false\n        );\n    }\n    #&#91;test&#93;\n    fn test_is_a_good_candidate_for_row() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n\n        assert_eq!(\n            is_a_good_candidate_for_row(0, 5, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_row(0, 7, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_row(0, 3, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(is_a_good_candidate_for_row(0, 9, &amp;initial_conditions), true);\n        assert_eq!(is_a_good_candidate_for_row(1, 4, &amp;initial_conditions), true);\n        assert_eq!(\n            is_a_good_candidate_for_row(8, 8, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_row(8, 9, &amp;initial_conditions),\n            false\n        );\n        let initial_conditions = [\n            &#91;5, 3, 0, 6, 7, 8, 9, 1, 2&#93;,\n            &#91;6, 7, 2, 1, 9, 5, 3, 4, 8&#93;,\n            &#91;1, 9, 8, 3, 4, 2, 5, 6, 7&#93;,\n            &#91;8, 5, 9, 7, 6, 1, 4, 2, 3&#93;,\n            &#91;0, 2, 6, 8, 5, 3, 7, 9, 1&#93;,\n            &#91;7, 1, 3, 9, 2, 4, 8, 5, 6&#93;,\n            &#91;9, 6, 1, 5, 3, 7, 2, 8, 4&#93;,\n            &#91;2, 8, 7, 4, 1, 9, 6, 3, 5&#93;,\n            &#91;3, 0, 5, 2, 8, 6, 1, 7, 9&#93;,\n        ];\n        assert_eq!(is_a_good_candidate_for_row(0, 4, &amp;initial_conditions), true);\n    }\n    #&#91;test&#93;\n    fn test_is_a_good_candidate_for_quadrant_ij() {\n        let initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n\n        assert_eq!(\n            is_a_good_candidate_for_sub_matrix(1, 1, 5, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_sub_matrix(8, 8, 2, &amp;initial_conditions),\n            false\n        );\n        assert_eq!(\n            is_a_good_candidate_for_sub_matrix(8, 8, 3, &amp;initial_conditions),\n            true\n        );\n    }\n    #&#91;test&#93;\n    fn test_solve() {\n        let mut unfeasible_conditions = [\n            &#91;0, 1, 2, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;3, 4, 5, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;6, 7, 8, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;9, 0, 0, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;0, 0, 0, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;0, 0, 0, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;0, 0, 0, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;0, 0, 0, 0, 0, 0, 0, 0, 0&#93;,\n            &#91;0, 0, 0, 0, 0, 0, 0, 0, 0&#93;,\n        ];\n\n        let mut cell_00 = initialize_cells(&amp;unfeasible_conditions);\n        let result = cell_00.solve(&amp;mut unfeasible_conditions);\n        match result {\n            Ok(_) => assert!(false), \/\/ should not be solvable\n            Err(_) => assert!(true), \/\/ expected failure\n        }\n    }\n    #&#91;test&#93;\n    fn test_solve_3() {\n        let mut initial_conditions = [\n            &#91;5, 3, 0, 6, 7, 8, 9, 1, 2&#93;,\n            &#91;6, 7, 2, 1, 9, 5, 3, 4, 8&#93;,\n            &#91;1, 9, 8, 3, 4, 2, 5, 6, 7&#93;,\n            &#91;8, 5, 9, 7, 6, 1, 4, 2, 3&#93;,\n            &#91;0, 2, 6, 8, 5, 3, 7, 9, 1&#93;,\n            &#91;7, 1, 3, 9, 2, 4, 8, 5, 6&#93;,\n            &#91;9, 6, 1, 5, 3, 7, 2, 8, 4&#93;,\n            &#91;2, 8, 7, 4, 1, 9, 6, 3, 5&#93;,\n            &#91;3, 0, 5, 2, 8, 6, 1, 7, 9&#93;,\n        ];\n        let mut cell_00 = initialize_cells(&amp;initial_conditions);\n        let result = cell_00.solve(&amp;mut initial_conditions);\n        for row in initial_conditions {\n            println!(\"original {:?}\", row);\n        }\n        match result {\n            Ok(_) => assert!(true),   \/\/ should not be solvable\n            Err(_) => assert!(false), \/\/ expected failure\n        }\n        assert_eq!(initial_conditions&#91;4&#93;&#91;0&#93;, 4);\n        assert_eq!(initial_conditions&#91;8&#93;&#91;1&#93;, 4);\n        assert_eq!(initial_conditions&#91;0&#93;&#91;2&#93;, 4);\n    }\n\n    #&#91;test&#93;\n    fn test_solve_4() {\n        let mut initial_conditions = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n\n        let solution = [\n            &#91;5, 3, 4, 6, 7, 8, 9, 1, 2&#93;,\n            &#91;6, 7, 2, 1, 9, 5, 3, 4, 8&#93;,\n            &#91;1, 9, 8, 3, 4, 2, 5, 6, 7&#93;,\n            &#91;8, 5, 9, 7, 6, 1, 4, 2, 3&#93;,\n            &#91;4, 2, 6, 8, 5, 3, 7, 9, 1&#93;,\n            &#91;7, 1, 3, 9, 2, 4, 8, 5, 6&#93;,\n            &#91;9, 6, 1, 5, 3, 7, 2, 8, 4&#93;,\n            &#91;2, 8, 7, 4, 1, 9, 6, 3, 5&#93;,\n            &#91;3, 4, 5, 2, 8, 6, 1, 7, 9&#93;,\n        ];\n\n        let mut cell_00 = initialize_cells(&amp;initial_conditions);\n        let result = cell_00.solve(&amp;mut initial_conditions);\n        match result {\n            Ok(_) => assert!(true),   \/\/ should not be solvable\n            Err(_) => assert!(false), \/\/ expected failure\n        }\n        assert_eq!(initial_conditions, solution);\n    }\n    #&#91;test&#93;\n    fn test_parse() {\n        let initial_text = \"[\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;\n        ]\";\n        let answer = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n        let initial_conditions = parse_initial_conditions(initial_text.into());\n\n        assert_eq!(initial_conditions, answer);\n    }\n    #&#91;test&#93;\n    fn test_global_solve() {\n        let mut initial_conditions: [&#91;usize; 9&#93;; 9] = [\n            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,\n            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,\n            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,\n            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,\n            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,\n            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,\n            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,\n            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,\n            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;,\n        ];\n        let answer: [&#91;usize; 9&#93;; 9] = [\n            &#91;5, 3, 4, 6, 7, 8, 9, 1, 2&#93;,\n            &#91;6, 7, 2, 1, 9, 5, 3, 4, 8&#93;,\n            &#91;1, 9, 8, 3, 4, 2, 5, 6, 7&#93;,\n            &#91;8, 5, 9, 7, 6, 1, 4, 2, 3&#93;,\n            &#91;4, 2, 6, 8, 5, 3, 7, 9, 1&#93;,\n            &#91;7, 1, 3, 9, 2, 4, 8, 5, 6&#93;,\n            &#91;9, 6, 1, 5, 3, 7, 2, 8, 4&#93;,\n            &#91;2, 8, 7, 4, 1, 9, 6, 3, 5&#93;,\n            &#91;3, 4, 5, 2, 8, 6, 1, 7, 9&#93;,\n        ];\n\n        solve(&amp;mut initial_conditions);\n\n        assert_eq!(initial_conditions, answer);\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FF79C6\">use<\/span><span style=\"color: #F8F8F2\"> std<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #F8F8F2\">collections<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">const<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">use<\/span><span style=\"color: #F8F8F2\"> clap<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Parser<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">use<\/span><span style=\"color: #F8F8F2\"> serde_json;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">use<\/span><span style=\"color: #F8F8F2\"> std<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #F8F8F2\">fs;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">use<\/span><span style=\"color: #F8F8F2\"> std<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #F8F8F2\">io<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Read<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">#&#91;derive(<\/span><span style=\"color: #8BE9FD; font-style: italic\">Parser<\/span><span style=\"color: #F8F8F2\">)&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">struct<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Cli<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    input_file<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Option<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">main<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cli <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Cli<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">parse<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> cli<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">input_file {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Some<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">ref<\/span><span style=\"color: #F8F8F2\"> input_file) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">process_input_file<\/span><span style=\"color: #F8F8F2\">(input_file);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">None<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">process_stdin<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(initial_conditions<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> [&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> cell_00 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initialize_cells<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> i <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> initial_conditions {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> serialized_row <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> serde_json<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">to_string<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">i)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #50FA7B\">println!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;{}&quot;<\/span><span style=\"color: #F8F8F2\">, serialized_row);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(error) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">println!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;{}&quot;<\/span><span style=\"color: #F8F8F2\">, error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">process_input_file<\/span><span style=\"color: #F8F8F2\">(input_file<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> buffer_result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> fs<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">read_to_string<\/span><span style=\"color: #F8F8F2\">(input_file);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> buffer_result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">eprintln!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Could not read file: {}&quot;<\/span><span style=\"color: #F8F8F2\">, input_file);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            std<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #F8F8F2\">process<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">exit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(buffer) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">parse_initial_conditions<\/span><span style=\"color: #F8F8F2\">(buffer);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">process_stdin<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> buffer_try <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    std<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #F8F8F2\">io<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">stdin<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">read_to_string<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> buffer_try)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">expect<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;paila&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">parse_initial_conditions<\/span><span style=\"color: #F8F8F2\">(buffer_try);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">parse_initial_conditions<\/span><span style=\"color: #F8F8F2\">(initial_text<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> [&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">] {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> parsed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Result<\/span><span style=\"color: #F8F8F2\">&lt;[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; 9&#93;; 9], serde_json<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Error<\/span><span style=\"color: #F8F8F2\">&gt; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> serde_json<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from_str<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_text);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> parsed {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(initial_conditions) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> initial_conditions,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(error) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">eprintln!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Problems parsing the Sudoku puzzle&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">&#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">]&quot;<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">eprintln!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Input file or stdin should have this format:&quot;<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">eprintln!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;{}&quot;<\/span><span style=\"color: #F8F8F2\">, initial_text);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">eprintln!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Parser error: {}&quot;<\/span><span style=\"color: #F8F8F2\">, error);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            std<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #F8F8F2\">process<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">exit<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">struct<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    next<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Option<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">Box<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\">&gt;&gt;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    is_fixed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">bool<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_set_from_column<\/span><span style=\"color: #F8F8F2\">(i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Result<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">&gt;, <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> i <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;i must be between 0 and 8&quot;<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">into<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> j <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #FF79C6\">..<\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            answer<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">insert<\/span><span style=\"color: #F8F8F2\">(sudoku&#91;j&#93;&#91;i&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(answer);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_set_from_row<\/span><span style=\"color: #F8F8F2\">(j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Result<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">&gt;, <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> j <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;i must be between 0 and 8&quot;<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">into<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> i <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #FF79C6\">..<\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            answer<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">insert<\/span><span style=\"color: #F8F8F2\">(sudoku&#91;j&#93;&#91;i&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(answer);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Result<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">&gt;, <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> i <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">||<\/span><span style=\"color: #F8F8F2\"> j <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">-<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;only valid for the head&quot;<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">into<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> original_quadrant <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(i, j);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #FF79C6\">..<\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #FF79C6\">..<\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(x, y) <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> original_quadrant {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    answer<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">insert<\/span><span style=\"color: #F8F8F2\">(sudoku&#91;x&#93;&#91;y&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(answer);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, candidate<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">bool<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> values_column <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_set_from_column<\/span><span style=\"color: #F8F8F2\">(i, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">sudoku)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">!<\/span><span style=\"color: #F8F8F2\">values_column<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">contains<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">candidate)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, candidate<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">bool<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> values_row <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_set_from_row<\/span><span style=\"color: #F8F8F2\">(j, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">sudoku)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">!<\/span><span style=\"color: #F8F8F2\">values_row<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">contains<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">candidate)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_sub_matrix<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    candidate<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">bool<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> values_quadrant_ij <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">(i, j, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">sudoku)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">!<\/span><span style=\"color: #F8F8F2\">values_quadrant_ij<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">contains<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">candidate)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">impl<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> [&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Result<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Some<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">None<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Solved&quot;<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">into<\/span><span style=\"color: #F8F8F2\">()),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">is_fixed {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> next_cell_solve_result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve_next<\/span><span style=\"color: #F8F8F2\">(sudoku);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> next_cell_solve_result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(solution) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(solution),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(e) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(e),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> candidate <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #FF79C6\">..<\/span><span style=\"color: #BD93F9\">SUDOKU_MAX_NUMBER<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">+<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, candidate, sudoku)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, candidate, sudoku)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_sub_matrix<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, candidate, sudoku)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    sudoku&#91;<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i&#93;&#91;<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j&#93; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> candidate;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> next_cell_solve_result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve_next<\/span><span style=\"color: #F8F8F2\">(sudoku);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> next_cell_solve_result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(solution) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(solution),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">                            \/\/ println!(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">                            \/\/     &quot;{}{} candidate {} is bad, backtracking&quot;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">                            \/\/     self.i, self.j, candidate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">                            \/\/ );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">continue<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            sudoku&#91;<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i&#93;&#91;<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j&#93; <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">            \/\/ println!(&quot;{}{} ran out of options&quot;, self.i, self.j);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;Go back!&quot;<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">into<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">solve_next<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, sudoku<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> [&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Result<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">String<\/span><span style=\"color: #F8F8F2\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">as_mut<\/span><span style=\"color: #F8F8F2\">()<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">()<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(sudoku)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">#&#91;derive(<\/span><span style=\"color: #8BE9FD; font-style: italic\">PartialEq<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #8BE9FD; font-style: italic\">Debug<\/span><span style=\"color: #F8F8F2\">)&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">enum<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant2<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant3<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant4<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant5<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant6<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant7<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant8<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant9<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(x<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">, y<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> (x, y) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant2<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant3<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant4<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant5<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant6<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant7<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant8<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (x, y) <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> x <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> y <\/span><span style=\"color: #FF79C6\">&gt;=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant9<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        (_, _) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant9<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initialize_cells<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">[&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">]) <\/span><span style=\"color: #FF79C6\">-&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Box<\/span><span style=\"color: #F8F8F2\">&lt;<\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> cell_00 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Box<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        next<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">None<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        is_fixed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> initial_conditions&#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;&#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93; <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    });<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> previous_cell <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> cell_00;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> (i, row_i) <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> initial_conditions<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">iter<\/span><span style=\"color: #F8F8F2\">()<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">enumerate<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> (j, value_j) <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> row_i<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">iter<\/span><span style=\"color: #F8F8F2\">()<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">enumerate<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> i <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">&amp;&amp;<\/span><span style=\"color: #F8F8F2\"> j <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">continue<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> is_fixed <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">*<\/span><span style=\"color: #F8F8F2\">value_j <\/span><span style=\"color: #FF79C6\">&gt;<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">as<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> new_cell <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Box<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> i,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> j,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                is_fixed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> is_fixed,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                next<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">None<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            });<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            previous_cell<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Some<\/span><span style=\"color: #F8F8F2\">(new_cell);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            previous_cell <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> previous_cell<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">as_mut<\/span><span style=\"color: #F8F8F2\">()<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">return<\/span><span style=\"color: #F8F8F2\"> cell_00;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">#&#91;cfg(test)&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">mod<\/span><span style=\"color: #F8F8F2\"> tests {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">use<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">super<\/span><span style=\"color: #FF79C6\">::*<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_cell<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> test_1 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            next<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">None<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            is_fixed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(test_1<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(test_1<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_cell_next_cell<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> test_2 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Box<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            next<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">None<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            is_fixed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        });<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> test_1 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Box<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">new<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">Cell<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            i<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            j<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            next<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Some<\/span><span style=\"color: #F8F8F2\">(test_2),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            is_fixed<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        });<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Some<\/span><span style=\"color: #F8F8F2\">(_next) <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> test_1<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> { <\/span><span style=\"color: #50FA7B\">panic!<\/span><span style=\"color: #F8F8F2\">() };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_initialize<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_00 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initialize_cells<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">is_fixed, <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_01 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_01<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_01<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_01<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">is_fixed, <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_02 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_01<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_02<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_02<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_02<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">is_fixed, <\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_03 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_02<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_04 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_03<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_05 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_04<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_06 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_05<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_07 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_06<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_08 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_07<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> cell_10 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_08<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">next<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_10<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">i, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_10<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">j, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(cell_10<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #F8F8F2\">is_fixed, <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_get_set_from_column<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(answer, <\/span><span style=\"color: #50FA7B\">get_set_from_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(answer, <\/span><span style=\"color: #50FA7B\">get_set_from_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_get_set_from_row<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(answer, <\/span><span style=\"color: #50FA7B\">get_set_from_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_get_quadrants<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">SubMatrixQuadrant<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #8BE9FD; font-style: italic\">Quadrant5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #50FA7B\">get_quadrant_from_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            answer,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            answer,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            answer,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">HashSet<\/span><span style=\"color: #FF79C6\">::<\/span><span style=\"color: #50FA7B\">from<\/span><span style=\"color: #F8F8F2\">(&#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            answer,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">get_set_from_sub_matrix_ij<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions)<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">unwrap<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_column<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions), <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions), <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_row<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions), <\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_is_a_good_candidate_for_quadrant_ij<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_sub_matrix<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_sub_matrix<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">is_a_good_candidate_for_sub_matrix<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_solve<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> unfeasible_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> cell_00 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initialize_cells<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">unfeasible_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> unfeasible_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">assert!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">),<\/span><span style=\"color: #6272A4\"> \/\/ should not be solvable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">assert!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">),<\/span><span style=\"color: #6272A4\"> \/\/ expected failure<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_solve_3<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> cell_00 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initialize_cells<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">for<\/span><span style=\"color: #F8F8F2\"> row <\/span><span style=\"color: #FF79C6\">in<\/span><span style=\"color: #F8F8F2\"> initial_conditions {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #50FA7B\">println!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #F1FA8C\">&quot;original {:?}&quot;<\/span><span style=\"color: #F8F8F2\">, row);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">assert!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">),<\/span><span style=\"color: #6272A4\">   \/\/ should not be solvable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">assert!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">),<\/span><span style=\"color: #6272A4\"> \/\/ expected failure<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(initial_conditions&#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">&#93;&#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(initial_conditions&#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">&#93;&#91;<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(initial_conditions&#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;&#91;<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">&#93;, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_solve_4<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> solution <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> cell_00 <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">initialize_cells<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;<\/span><span style=\"color: #F8F8F2\">initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> result <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> cell_00<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">match<\/span><span style=\"color: #F8F8F2\"> result {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Ok<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">assert!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">),<\/span><span style=\"color: #6272A4\">   \/\/ should not be solvable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Err<\/span><span style=\"color: #F8F8F2\">(_) <\/span><span style=\"color: #FF79C6\">=&gt;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">assert!<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9\">false<\/span><span style=\"color: #F8F8F2\">),<\/span><span style=\"color: #6272A4\"> \/\/ expected failure<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(initial_conditions, solution);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_parse<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_text <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F1FA8C\">&quot;[<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;5, 3, 0, 0, 7, 0, 0, 0, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;6, 0, 0, 1, 9, 5, 0, 0, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;0, 9, 8, 0, 0, 0, 0, 6, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;8, 0, 0, 0, 6, 0, 0, 0, 3&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;4, 0, 0, 8, 0, 3, 0, 0, 1&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;7, 0, 0, 0, 2, 0, 0, 0, 6&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;0, 6, 0, 0, 0, 0, 2, 8, 0&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;0, 0, 0, 4, 1, 9, 0, 0, 5&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">            &#91;0, 0, 0, 0, 8, 0, 0, 7, 9&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F1FA8C\">        ]&quot;<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> initial_conditions <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">parse_initial_conditions<\/span><span style=\"color: #F8F8F2\">(initial_text<\/span><span style=\"color: #FF79C6\">.<\/span><span style=\"color: #50FA7B\">into<\/span><span style=\"color: #F8F8F2\">());<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(initial_conditions, answer);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    #&#91;test&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">fn<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">test_global_solve<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> [&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">0<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">let<\/span><span style=\"color: #F8F8F2\"> answer<\/span><span style=\"color: #FF79C6\">:<\/span><span style=\"color: #F8F8F2\"> [&#91;<\/span><span style=\"color: #8BE9FD; font-style: italic\">usize<\/span><span style=\"color: #F8F8F2\">; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;; <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">] <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            &#91;<\/span><span style=\"color: #BD93F9\">3<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">4<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">5<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">2<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">8<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">6<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">1<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">7<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #BD93F9\">9<\/span><span style=\"color: #F8F8F2\">&#93;,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        ];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">solve<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #FF79C6\">&amp;mut<\/span><span style=\"color: #F8F8F2\"> initial_conditions);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #50FA7B\">assert_eq!<\/span><span style=\"color: #F8F8F2\">(initial_conditions, answer);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>This is the follow up to https:\/\/camilo.matajira.com\/?p=673.Back then I struggled to implement my &#8220;usual&#8221; solution to sudoku puzzles. My key pain point was working with a struct (a Cell) that has &#8220;references&#8221; to itself (next Cell) and to the head of the &#8220;linked list&#8221;. Approaching the problem like this worked in Java, Python and Javascript&#8230;<\/p>\n","protected":false},"author":1,"featured_media":665,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-678","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projects"],"_links":{"self":[{"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/posts\/678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=678"}],"version-history":[{"count":1,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/posts\/678\/revisions"}],"predecessor-version":[{"id":679,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/posts\/678\/revisions\/679"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=\/wp\/v2\/media\/665"}],"wp:attachment":[{"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/camilo.matajira.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}