//! --- Day 18: Operation Order --- //! As you look out the window and notice a heavily-forested continent slowly appear over the horizon, you are interrupted by the child sitting next to you. They're curious if you could help them with their math homework. //! //! Unfortunately, it seems like this "math" follows different rules than you remember. //! //! The homework (your puzzle input) consists of a series of expressions that consist of addition (+), multiplication (*), and parentheses ((...)). Just like normal math, parentheses indicate that the expression inside must be evaluated before it can be used by the surrounding expression. Addition still finds the sum of the numbers on both sides of the operator, and multiplication still finds the product. //! //! However, the rules of operator precedence have changed. Rather than evaluating multiplication before addition, the operators have the same precedence, and are evaluated left-to-right regardless of the order in which they appear. //! //! For example, the steps to evaluate the expression 1 + 2 * 3 + 4 * 5 + 6 are as follows: //! //! 1 + 2 * 3 + 4 * 5 + 6 //! 3 * 3 + 4 * 5 + 6 //! 9 + 4 * 5 + 6 //! 13 * 5 + 6 //! 65 + 6 //! 71 //! Parentheses can override this order; for example, here is what happens if parentheses are added to form 1 + (2 * 3) + (4 * (5 + 6)): //! //! 1 + (2 * 3) + (4 * (5 + 6)) //! 1 + 6 + (4 * (5 + 6)) //! 7 + (4 * (5 + 6)) //! 7 + (4 * 11 ) //! 7 + 44 //! 51 //! Here are a few more examples: //! //! 2 * 3 + (4 * 5) becomes 26. //! 5 + (8 * 3 + 9 + 3 * 4 * 3) becomes 437. //! 5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4)) becomes 12240. //! ((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2 becomes 13632. //! Before you can help with the homework, you need to understand it yourself. Evaluate the expression on each line of the homework; what is the sum of the resulting values? //! --- Part Two --- //! You manage to answer the child's questions and they finish part 1 of their homework, but get stuck when they reach the next section: advanced math. //! //! Now, addition and multiplication have different precedence levels, but they're not the ones you're familiar with. Instead, addition is evaluated before multiplication. //! //! For example, the steps to evaluate the expression 1 + 2 * 3 + 4 * 5 + 6 are now as follows: //! //! 1 + 2 * 3 + 4 * 5 + 6 //! 3 * 3 + 4 * 5 + 6 //! 3 * 7 * 5 + 6 //! 3 * 7 * 11 //! 21 * 11 //! 231 //! Here are the other examples from above: //! //! 1 + (2 * 3) + (4 * (5 + 6)) still becomes 51. //! 2 * 3 + (4 * 5) becomes 46. //! 5 + (8 * 3 + 9 + 3 * 4 * 3) becomes 1445. //! 5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4)) becomes 669060. //! ((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2 becomes 23340. //! What do you get if you add up the results of evaluating the homework problems using these new rules? use std::collections::VecDeque; use aoc_runner_derive::{aoc, aoc_generator}; #[derive(Clone, Copy, Debug, PartialEq)] pub enum Token { Num(u64), Add, Mul, Open, Close, Space, Stop, } #[aoc_generator(day18)] fn generator(input: &str) -> Vec> { input.split('\n').map(lex).collect() } fn lex(input: &str) -> Vec { input .bytes() .map(|b| match b { b'(' => Token::Open, b')' => Token::Close, b'+' => Token::Add, b'*' => Token::Mul, b' ' => Token::Space, c @ b'0'..=b'9' => Token::Num((c - b'0') as u64), c => panic!(format!("unexpected char '{:?}'", c)), }) // Ignore spaces .filter(|t| t != &Token::Space) .chain(std::iter::once(Token::Stop)) .collect() } mod part1 { use std::collections::VecDeque; use super::Token; fn parse_item(tokens: &mut VecDeque) -> u64 { let t = tokens.pop_front().unwrap(); match t { Token::Num(n) => return n, Token::Open => { let expr = parse_expression(tokens); if let Token::Close = tokens[0] { // TODO(wathiede): how to do not? } else { panic!("expected close paren"); } tokens.pop_front(); return expr; } t => panic!(format!("unexpected token {:?}", t)), }; } pub fn parse_expression(tokens: &mut VecDeque) -> u64 { let mut result = parse_item(tokens); let mut t = tokens[0]; loop { match t { Token::Mul => { tokens.pop_front(); let rhs = parse_item(tokens); if let Token::Mul = t { result = result * rhs; } t = tokens[0]; } Token::Add => { tokens.pop_front(); let rhs = parse_item(tokens); if let Token::Add = t { result = result + rhs; } t = tokens[0]; } _ => break, } } result } } fn parse_part1(tokens: &[Token]) -> u64 { let mut vd: VecDeque = tokens.into_iter().cloned().collect(); part1::parse_expression(&mut vd) } #[aoc(day18, part1)] fn solution1(tokens_list: &[Vec]) -> u64 { tokens_list.iter().map(|tokens| parse_part1(tokens)).sum() } mod part2 { use std::collections::VecDeque; use super::Token; fn parse_item(tokens: &mut VecDeque) -> u64 { let t = tokens.pop_front().unwrap(); match t { Token::Num(n) => return n, Token::Open => { let expr = parse_expression(tokens); if let Token::Close = tokens[0] { // TODO(wathiede): how to do not? } else { panic!("expected close paren"); } tokens.pop_front(); return expr; } t => panic!(format!("unexpected token {:?}", t)), }; } fn parse_term(tokens: &mut VecDeque) -> u64 { let mut result = parse_item(tokens); let mut t = tokens[0]; while let Token::Add = t { tokens.pop_front(); let rhs = parse_item(tokens); if let Token::Add = t { result = result + rhs; } t = tokens[0]; } result } pub fn parse_expression(tokens: &mut VecDeque) -> u64 { let mut result = parse_term(tokens); let mut t = tokens[0]; while let Token::Mul = t { tokens.pop_front(); let rhs = parse_term(tokens); if let Token::Mul = t { result = result * rhs; } t = tokens[0]; } result } } fn parse_part2(tokens: &[Token]) -> u64 { let mut vd: VecDeque = tokens.into_iter().cloned().collect(); part2::parse_expression(&mut vd) } #[aoc(day18, part2)] fn solution2(tokens_list: &[Vec]) -> u64 { tokens_list.iter().map(|tokens| parse_part2(tokens)).sum() } #[cfg(test)] mod tests { use super::*; #[test] fn test_lex() { let tokens = vec![ Token::Num(2), Token::Mul, Token::Num(3), Token::Add, Token::Open, Token::Num(4), Token::Mul, Token::Num(5), Token::Close, Token::Stop, ]; assert_eq!(lex("2 * 3 + (4 * 5)"), tokens); } #[test] fn part1() { for (input, want) in vec![ ("1 + 2 * 3", 9), ("(1 + 2) * 3", 9), ("((1 + 2) * 3)", 9), ("1 + (2 * 3)", 7), ("(1 + (2 * 3))", 7), ("1 + 2 * 3 + 4 * 5 + 6", 71), ("(1 + 2 * 3 + 4 * 5 + 6)", 71), ("2 * 3 + (4 * 5)", 26), ("5 + (8 * 3 + 9 + 3 * 4 * 3)", 437), ("5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))", 12240), ("((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2", 13632), ] { let got = parse_part1(&lex(input)); assert_eq!(got, want, "got {}, want {} for {}", got, want, input); } let input = r#"1 + 2 * 3 + 4 * 5 + 6 2 * 3 + (4 * 5) 5 + (8 * 3 + 9 + 3 * 4 * 3) 5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4)) ((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2"#; assert_eq!(solution1(&generator(input)), 71 + 26 + 437 + 12240 + 13632); } #[test] fn part2() { for (input, want) in vec![ ("1 + (2 * 3) + (4 * (5 + 6))", 51), ("2 * 3 + (4 * 5)", 46), ("5 + (8 * 3 + 9 + 3 * 4 * 3)", 1445), ("5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))", 669060), ("((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2)", 23340), ] { let got = parse_part2(&lex(input)); assert_eq!(got, want, "got {}, want {} for {}", got, want, input); } } #[test] fn comprehensive_part1() { let mut ts = vec![ ("(7 * (3 + 8 + 8 + 7) + (6 + 8 * 2 + 5 + 2 * 6) * (5 + 2) * 9) + ((7 * 4 + 8) * 6 * 8 + 9) * 7 * 2 * 2", 740124), ("6 * ((9 + 4) * (6 * 7 + 5 + 8 * 2))", 8580), ("7 * 8 + 2 + 8 * (8 * 4) * (4 + 8)", 25344), ("(9 + 3 + 2 * 5 * 8) + 9 + 5 * 2 * 5 * (6 * 6 * 4 + 6 * 9 * 3)", 23247000), ("6 * 6 * 4 * (6 + (3 * 9 * 2) + 9 + (4 + 7 + 7))", 12528), ("7 * ((4 * 6 + 4 + 6 * 8 + 6) + (2 * 7 * 8 + 5 * 3 + 7) + (5 * 5 * 5 * 7) + 8 * 7)", 74431), ("(8 + 9 * 7 * 9 + 6) + (7 + 5) + 6", 1095), ("5 * (6 * (3 + 2 + 9)) + 8 + 3 + 5 * (4 + 3 * 8 * 8 * 6 * 2)", 2343936), ("4 + (3 + 4 * (4 + 9 + 3) * (4 * 8 * 4 * 9))", 129028), ("4 * 4 * 6 * 2 + ((8 * 4 * 3 + 6) * 5) + 6", 708), ("(8 * (8 + 5 + 5 * 7) * 9 + 2 + 9) * 4 + 9 * ((3 + 3) + 8) + 9", 508783), ("((9 + 8 * 3 + 2 + 9 + 8) * 3 + (3 + 7 * 6) * 9 * 2) + 3 * 7", 34041), ("5 + 5 * (5 * (6 + 6 + 6 + 7) * 7 + (9 * 4) * 4 * (8 * 9))", 2623680), ("7 * (2 * 7 + 3 + 5 + 5 * 2) + 4 + 3 * 3 + 5", 1160), ("(4 + 5 * (2 * 4 + 5 * 2 * 7 + 5) + 2 + 9) + 4 + 9 * 9 * 3", 46089), ("7 * 6 + (6 * 2 + 4 + 5 * 8) + (6 * 2 * (4 * 7 * 2) + 9 * (5 * 2 * 4) + (3 + 2 * 5)) * 8", 219800), ("2 + ((9 * 3 * 3 * 3) * (5 * 9 + 6 + 7 + 6 + 8) * 3)", 52490), ("7 * ((9 + 7 + 4 * 3 * 4 + 4) + 4 * 3) * 5 * 3 * 7", 546840), ("8 * (3 + 5 * 9 + 4) * 6 + 4", 3652), ("7 + 6 * 7 * ((7 * 6 * 2) * 3) * 5 * 7", 802620), ("8 + 5 * 4 * (3 + 5 * (8 + 5 * 2) + 6) + 6", 11134), ("4 * 8 + ((3 * 5 * 4) + 7) + (4 * 2)", 107), ("((5 + 8 + 7 + 6 * 6 + 3) + 4 * 3 * (5 * 2) * 5 * (2 * 9)) + 6 + 3 * (2 * (2 + 4 + 8) * 4) + (9 + 3 + 6 * (9 + 5 * 6 * 3 * 8 * 5) + (4 * 6) + (6 * 3 + 2 + 8))", 49473700), ("(3 + 4 + 8) + 6 * (7 * 6 * (9 * 3 * 5 * 5 * 4 * 5) + (6 + 4) * (5 * 2 * 3 + 3) + (2 * 7)) + 2 * 4", 1571752904), ("6 * (6 * 9 * (3 * 9) * 4 + 9) + 6", 35052), ("4 + 6 * 7 * ((3 + 5 + 3) * (6 + 3 * 9 + 6 * 8 * 9) + 6 * 4) * 8", 154358400), ("5 + (6 + 9 * (7 * 8 * 8 * 3 * 4) + 2) * 4 * 2", 645176), ("(2 * 7 * 6 + 9 + (3 * 6 + 4 * 7 + 5) + 8) + 7 + 7 * 8", 2192), ("2 + (6 + 4 + (5 + 5) * 7) * 2 + 7 * 5", 1455), ("4 + 9 * 3 + 8 * 6", 282), ("(5 + 5 + 9 * 8 * (4 * 5 + 6 + 3 * 8 * 3) + 6) + 9 + 9", 105816), ("(8 * 4 * 7 + 9 + 6 * 9) * (9 + 2 * 2) + 3", 47325), ("((9 * 4 + 8 + 4 * 2 + 2) * 3 + (6 + 9 * 5 * 4) * 4 + 6 * 5) * 5 * 3 * 5 + (3 + 5 * 4)", 893282), ("5 + (5 * 3) * (2 + 8) * (3 + 6 + 4 * 6 + 7 + 7) * 5 * 7", 644000), ("6 * 6 * 7 * (5 * 4 + 2 + 6 + (8 + 6 + 4 + 9 * 5))", 41076), ("2 * 9 + (2 * (8 * 7 + 6 + 5 + 3) + 2 + 9 * (3 * 9 * 4 * 7 * 7 + 5) + 3) + (4 + 6 * 4 + 6)", 799914), ("(9 + (8 * 8 + 2 + 2 * 6 + 6)) * 8 + 4 + 3 + (9 + 3 + 9 + 9 * 4 * 8) * 2", 8702), ("8 * 4 * (4 * (3 + 7 * 7 + 3) + 8 * (5 + 2 + 3) * 2) + 9", 192009), ("5 + (6 * (3 * 3 + 7 * 3) * (4 * 4) + 2 * 4 * 4)", 73765), ("3 + (5 * 8 * 9 * 3 + 9 * (6 * 7)) * 9 + 3", 411672), ("3 * (9 * 3 + (5 + 4 * 7 + 3 + 8)) + 4 * 2 * 3", 1842), ("8 * 9 + 6 + (7 + 7 + 9 * 8 * 5 * 6) * 5", 27990), ("(8 + 9 + 3 + 7 * 7) + 2 + 9 + (8 + 7 + 4 + 2) + 9", 230), ("4 * (2 * (7 * 4 + 2 + 9 + 6 + 7) + (4 + 2) * 3 + 9 + 6) + 6 * 4 + 7 * 5", 27755), ("(3 * 4 + (5 * 8 * 2) * (7 + 8)) + 7 + 8 + 5 + ((6 * 9) * 4 * 5)", 2480), ("4 + ((9 + 9) + (7 * 8 + 2 * 8 * 2) + 9) + 2 + 7 * 2", 1936), ("8 * 3 * (9 + 5 + 8 + 5)", 648), ("4 + 4 + (6 + 2 * 7 + 9 + 6 * 5)", 363), ("((8 + 3 * 8 * 2) + 7 + 7 * (7 * 7 * 7 + 3) * 9 * (9 * 4 + 7)) + 4 + 6", 25441390), ("6 + (7 * 2 + 4 + 5 + 4) + 9 + ((7 * 9) * 7) * 5", 2415), ("(7 * 3 * 2) * ((9 + 6 * 2 * 6 * 3) + (6 * 7) + 3 + (6 + 5 * 5 + 4 + 9 * 6) * 4 + 9) + 4 + 7 + 6", 167219), ("9 * (3 * (9 + 8)) * 4", 1836), ("6 * (4 * 2 * (9 * 5 * 4 + 7 + 9) + 6 + (3 + 6 * 2)) * 5 * (3 * (2 + 6 * 8 * 6 + 3 + 7) * 8 * 7 * (9 * 8 * 7 + 7 + 9) * 7) + 3 + 6", 11507240908809), ("7 + 3 * ((6 * 3 * 9) + 3 * 9)", 14850), ("7 * ((4 + 4 * 4 * 9 * 7) + 2 * 9) * 8 * 6 * 6 + 3", 36614595), ("6 + 5 + (5 + 3 * (3 + 7 + 9 * 3) * 6) + 3 + ((2 * 3 * 4 + 4) * 6 + (3 + 3) + 2)", 2926), ("9 + ((8 * 9 * 3 * 2) * 5 + 8)", 2177), ("(2 + 7) * 3 * (8 + 5) + 9", 360), ("4 * (5 + 4 + 6 * (9 * 4 + 8 * 4 * 7 * 3) * (4 * 4 * 6) * (9 + 7 + 8 * 4)) * (4 + 4 + 9 + 8) + 7 * 8 + 5", 408748032061), ("((7 * 4 * 4 * 3) * 4 + 2 * 2 + 2) * 9 + 9 * 8 + 9", 194049), ("4 + 6 + 2 * (5 + 3 + 8 * 4)", 768), ("((7 + 6) + 3 * 3 * 5) * ((9 * 3 + 5 + 8) + (3 + 8 * 8 + 7 + 5 * 6) + 2 * 5 + (7 + 9 + 2)) + (4 * 2 * (5 + 8 + 5 + 3) * 5 + 6 * 2) + 6 * 5 * (2 * (9 + 4) * (7 * 8) * 8 + 7)", 45245758950), ("6 + 5 + 5 + 2 * 5", 90), ("5 + 5 + 8 * 8 + 2 + 6", 152), ("(3 * (4 * 6 * 8 * 2)) + 3", 1155), ("(5 + 6 * 3 + 5 * 2) * 5 * (3 * 5 + 2 * 7 * 9 * 3) + 5 * ((6 + 2 * 7 + 2 + 4 + 2) * 9 + 6) + 7", 710589997), ("(7 + 7 * 4 * 7) * ((8 * 5 * 9) + 6 * 9 + 3 * 3 * 9) * 8 * ((3 * 5 * 2 + 6 + 5) * 7 + (6 * 2 * 7 * 7) + 8 + 8 + 6)", 250409734848), ("(3 * 6 + 7 + 6 + 3 + 7) * 4 * 7 * ((9 + 3 + 6) * 5 + 3 + (5 * 7 + 4 + 5 * 2) + 5) * 5 * 9", 9608760), ("7 * ((7 + 6 + 2 + 9) + 3 * 4 + 9 + 2 + 2) + 2", 849), ("3 * 8 * 2 * (6 * 2 * 2 + 4 * 8) + 8 + 7", 10767), ("8 + 3 + ((4 * 6 * 5 * 7) * 9 + 9 + 8 * 4)", 30319), ("(6 + 4 + (6 + 3 + 3 + 3) + 6) * 9", 279), ("2 * 6 * (5 + 2) * (6 * 6 + 7 + 2)", 3780), ("4 + (8 + 2 + 4) * 4 * 5 + (9 * 5 + 9) + 8", 422), ("6 * 3 * 9 + 6 + (2 * 4 * 3 + 2 * 5 * 3) * 6", 3348), ("2 + (8 + 5 * 7 + 4 + 7 * (2 + 9 * 6 * 5 * 3 + 3)) + 9 * 4", 405188), ("(9 + (2 + 6 + 7 * 4 * 8) + 9 * 4 + 9) * 3 + 8 * 8", 48088), ("2 * (9 * 5 * 9 + (8 * 9 + 5)) * 8 * 8", 61696), ("3 + 6 + 2 * 3 * 9 + 9", 306), ("8 * 7 + 8 * (5 + 6) * 5 + 4", 3524), ("4 * (6 * 2 * (3 + 6 * 3) + 7 * 5 + 6)", 6644), ("(7 * 3 * 7 * 4 * 3 * 2) * (9 + 8 * 9) + 9 * (4 * 5 + 3 + 5 + 9)", 19972341), ("9 + 8 * 3 * 4 + (9 + 8 * 9) + (4 * (6 * 4 * 9 * 5 + 6 + 4) + 8 + 7 + (4 * 9))", 4768), ("2 * (4 * (3 + 4 + 8 + 5) * 8 * 6)", 7680), ("8 * (8 * 2 * 6 + 6 + 6) * 8", 6912), ("(9 + 3 * 4 * 9 + 5 * 5) * 4", 8740), ("(9 * 9 * 4 * 4 + (6 * 2) + (3 + 3 * 2)) + 3 + ((2 * 3 + 8 * 4 * 8 * 2) + 2 + 3)", 2224), ("7 * (9 * (6 + 3 + 7)) * ((8 + 3 + 3 * 3 + 3 + 7) + 4 + 5 + 3 * (6 * 4 * 6 * 6 + 2 * 5) + (2 + 3 + 9 + 3 * 6 + 4)) + 6", 279443814), ("8 + 6 * (3 + 5 + 6 + 9) * 4", 1288), ("(6 + 7 + 7 + 7 * 6 + 5) + 3 * 5 * 4 * 5 * 6", 102000), ("(2 * 9 + 9 + 3 * 7 + 6) + 3 + 7 + 4 + 9", 239), ("(7 + (8 * 7 * 4 * 7 * 2 + 4) + (5 + 2 * 2 + 2 * 2 * 6)) * 3 * 4 + (4 * 2 + 4 * 6 + 3 * (8 * 6 + 4 * 3 * 7)) * 6", 731808), ("2 * (3 * (5 * 7 * 8 * 7 + 8) + (6 * 3 + 5) + 5 + 9)", 11882), ("8 * 4 + ((7 + 2 + 8) + (2 * 8 * 4 * 4 + 4 * 7) * 2) * 5 * 4", 74120), ("2 * 6 * 2", 24), ("2 + (2 + 6 * 5 * 9) + ((8 + 2 * 6 * 5 * 5) * 7 + 3) + 3", 10868), ("((9 + 4 + 6 * 3 + 9) * 5) * (7 * 2 * 7 * 5 * 2) + 7 + 9 + 7", 323423), ("2 + 2 * 8 + 8", 40), ("4 + 6 + 4 * 7", 98), ("4 + 5 + 5 * 8 * (8 + 4 + (2 * 8 + 9 * 9 + 4 + 5))", 27552), ("(7 + 2 + (8 * 4 * 2 + 9 * 6) * 4) * 2 + (9 * 2 * 8 * 9 * 4)", 8760), ("4 + 9 + 6 * (4 * 6) + 7", 463), ("6 + 4 + 8 * (7 * 9 + 7)", 1260), ("3 * 2 + 2 + 9 + (2 * 9 * 2 * 8 * 2 * (2 + 8 + 9 * 9 + 7)) * 7", 717815), ("9 + 9 + 5", 23), ("(2 + 3 * 3) + 7", 22), ("(9 * 7 + (8 + 8 * 6) + 2 * 7 * 3) + 6 * (5 * (2 + 9 + 9 + 6) + 6) * 8 * (4 + 4 * 6 * 5 + 5) * 8", 7222709760), ("7 + 4 + (4 * 2 + (2 * 7 + 2 + 4 + 2 + 5) + 9 * (9 * 7 + 7)) + 9 + 7 + (8 + 9 * 7 + 2 + (7 * 8 * 5 * 4 + 6 + 8))", 4362), ("(8 * 3) * (9 + 2 * 7 * 7 + 7) * 6 * 8 + 8 + (9 + 9 + 3 * 5 + 3)", 629108), ("4 * 5 + 2 + 4", 26), ("((7 + 3 * 8 + 3) * 8 + 4 + 4 * 4 + 8) * 5 + 9 * (3 * 9 + 8 * 7 * 9 * 4) + 7", 118972987), ("(8 + 6 + 7 + 9) + 8 * 6 * (5 + 2 + 3) * 8", 18240), ("(9 * 8 * (6 * 5) + 9) + 4 + 8 + 8 * 8", 17512), ("(4 + 5 * 9) * 7 + 7 * 6 + 8 * (2 + 5 * 8)", 193312), ("(4 + 3 + (6 + 2 + 2 + 6 * 6 * 2) * 4 * 2 * 9) + 3", 14331), ("8 * (5 + 8 + 2 * 7) + 2 + ((5 * 6 + 4 + 7 + 6 * 5) * 7 * 3 + 8)", 5785), ("2 + 5 + (6 * 3 + 2) + 8", 35), ("2 + 9 * 6 * 5 + 5", 335), ("3 * 3 + 7", 16), ("(9 + 4 * 9) + 5 + (2 * 6 * (6 + 9) + 2 + 6) * 2 * ((9 * 6 + 7 * 3) + 5 * 2 + 3 * 9)", 2114820), ("2 + 6 + ((6 * 9 * 9 * 8 * 9) + 9) * (5 + 2 * 5 * (3 + 5 * 8 * 5 * 2 * 9) * 8) * ((7 + 9 + 3 + 6 + 5) * 4 * 5)", 33877509120000), ("3 * 9 * (5 + (3 * 4 * 2 + 8) + 5 * 3) + 4", 3406), ("9 * (9 * 3 + 3 + 4 + 7 + 4) + 3", 408), ("2 * 9 + 3 * 9 + 5 + 9", 203), ("(6 + (6 * 6 * 6 + 7 + 7 + 5) * 5) + 3 + 4 * 9", 10908), ("(2 * 8 * 8 * 6 * 8) + (5 + (5 * 6) * (8 + 5 + 7 * 7 + 2) + (6 * 4 + 7 + 5) + (3 + 5 + 8 + 6)) * 8 + ((8 * 3 + 3 * 7) * 4 + (3 * 8 * 4))", 90228), ("4 + ((9 * 2 * 9 * 9 * 7 + 5) * 6) * 7 * 7 + 5 * 8", 24017880), ("(3 * 6 + 6 * (5 + 6 * 4 * 6 + 2 + 9)) * 9 * 9 + (2 * 7 * 2 * 5)", 534740), ("6 + 2 + (8 + 6)", 22), ("6 + 3 * (3 + 3) + 8 * (9 * 6)", 3348), ("(2 * 8 + 4 + 5) + 7", 32), ("7 + (2 * 9 * 5 * 6)", 547), ("2 + 9 + ((7 + 3 + 3 * 9) * 6 + (5 + 2 + 8 + 5 * 6) * 7 + 8)", 5773), ("((4 + 9 + 8 * 6 + 8 * 9) + 8) * 6", 7284), ("9 * (9 * 3 + (3 * 8 * 8 * 7) * (4 + 8) + 8 * (5 * 3 + 2 + 4 * 3))", 9332820), ("9 * (7 + (3 * 5 * 5 + 3 * 7)) + (5 * 3 + (4 * 7 * 7 + 8) * (3 * 7 * 5 * 6) * 8) * 5 + (2 * 7) * 4", 22174796), ("4 * ((2 + 3 * 2 * 2 + 3) + 4 * 4 * 4 * 5 + (3 + 3 * 9 * 9 + 7)) * 9", 95508), ("8 + 7 * 4 * 3 * (5 + 9 + 8 * 7 * 3)", 83160), ("9 + (4 * (2 * 6 + 7) + 5 * 4 + 8 + (6 + 7 * 8 * 2)) + 9 + 5 + 8", 571), ("3 * ((5 * 2 * 8 * 7 * 2 + 4) * (3 * 3 * 5 + 2) + 7 + 8) * 8 * 2 + 3", 2536467), ("(8 * 2 + 5 + (4 * 9 * 7)) * 5 + (9 * 8) * (5 * (7 * 8 + 4 * 4) + 3)", 1728711), ("((7 * 6 + 9 + 7 + 9 + 9) * 2 * 8 + (6 + 4 * 7 * 2 * 2) * 7 + (2 + 9 + 9 + 5 + 4)) * 5 * 2 + 7", 105017), ("7 + 2", 9), ("4 * ((2 * 6) * 5 * 5 + 9 * (7 * 7 * 3 + 8)) + 2", 191582), ("6 * 8 + 5 + 4 * (5 + 8)", 741), ("4 + 6 * (4 * 5 * 3 * 5 * 5 * 6) * 8 * 5", 3600000), ("7 + ((6 * 6 + 2) + 7 * 7 + 7 * 9 * 6) + 6", 17401), ("(7 + 3 * (2 * 5 + 3 * 9)) + 2 * 2", 2344), ("6 + 3", 9), ("2 * 8 * (3 + 8 * (4 + 6 * 4) * 8 * 2)", 112640), ("8 * ((4 + 8 * 5 + 7) + 6 + (4 + 8 + 4 + 9 * 7 + 9) + 2) + 5", 2077), ("(7 + 7 + 2 + 3 + 6 * 3) * ((7 + 5 + 8 + 5 * 6) + 4 + 6 * (3 + 3) * (4 + 6 * 9 * 6 + 4) * 7) * 3 * 9 + 5 + 4", 7402752009), ("5 * 7 * (5 * (2 + 5 * 7 + 7 * 5) + 9) + 3", 49318), ("8 + 2 * 4 * 3 + (8 + 3 + 4 + 3 + 2 * (4 * 5)) * 5", 2600), ("3 + (8 * 3) * 7 + 4 * 5 * 2", 1930), ("(7 * (7 * 2 * 7 * 3) * 3 + 2 + 7 * 6) * 4 * 6 + 6 + 6", 890364), ("(5 + 2 + 2 * 8 + (2 * 9 + 7 + 3) + 5) * 9", 945), ("(6 + (7 + 8 * 2 + 9) + (7 * 3 * 4 * 5) + 6 * 3 * 4) + (3 * 2 * 5)", 5682), ("4 + 7 + (8 * 7 + (5 * 4))", 87), ("8 * 2 * 5 * (9 + 4) + (3 * 7)", 1061), ("(3 + 4 + 8 + 6 + 2) * 9 + 6 + 6 + 3", 222), ("(9 + (3 * 4 * 5 * 8 + 5) + (5 + 8)) + 5 * ((2 + 5) + (7 + 9) * 2) * (6 * 3) + 8", 423944), ("9 * (3 + 9 + 8 * (9 + 7 + 9 + 8 * 6) + 8 * 8) + 2", 285698), ("7 * ((9 * 2 + 8 * 4 + 7) * 4 + 3 + (5 * 3 * 5 + 3 + 4)) * 5 * 7", 129605), ("5 + 2 + (8 * 8) + 8", 79), ("4 * (4 * 9 + (7 * 6 + 2 * 2 + 5 + 8) * 9 + 7) * 3 * 7", 104160), ("9 + 9 + (4 * (8 + 2 * 5 * 9 + 9 * 2) * 4 * 7) + (6 + 2) * ((8 * 7) + 9 * (7 + 7 * 7) + 2 + 5 + 2) + 6", 656029124), ("9 + 4 + (3 * 9 * 3 * 9) + (3 + (2 + 9 + 9 + 8 + 7) + 5 + 9 * 3) * 7 * (4 + 7 * 8 + 7 * (4 * 2 + 5 * 8 + 9 + 8) + 3)", 72276428), ("6 + (2 + 6) * (6 * 2 * 2 + 7) * 4 * 6", 10416), ("6 * (2 + (6 * 7 + 7 * 9) * 6) * 3 * 8 + 3", 382755), ("8 + (5 + 4 + 6)", 23), ("9 + 2 * (5 * 5 * 5) * 2 * 5", 13750), ("4 * 4 * ((3 * 3) * (9 + 7 + 5) + 5 + 9) + 7 * (4 * 2 * 4) * 7", 729120), ("((4 * 5 * 7 * 7 + 3) * 9) * (6 * (7 * 8 * 7 + 3 + 7) + (4 * 2 + 3 + 3) * 4 + 6)", 85904370), ("4 * 2 + 3 + 2 * (2 + 2 * 2 * 8)", 832), ("4 + ((3 + 8) * 7 + 2 + (9 + 4 + 9 + 3 + 4 + 6) * (7 * 5 + 8)) + 4 + 5 * 8 + 2", 39322), ("(5 * 2) + 3 + (3 + 9) + 4 + 4 * 5", 165), ("6 + (5 + 8 + 6 + (7 + 5 + 9)) + (3 * 5 + 8 * 3 * 4) * 4 + 4 + 5", 1297), ("((7 + 4 * 6) * 7 * 2 + 6) * 7 + 8", 6518), ("7 * 5", 35), ("2 + 9 * 4 + 9 + 4 + (8 * 9)", 129), ("5 + 5 * ((5 + 6) + 2 * 4) * (8 + 8 * 5) + 3", 41603), ("5 * 5", 25), ("4 * 3 * 4 + 3 * (7 * 9) + 4", 3217), ("4 + 4 * (8 * 3 + 2 * 8 + 2) + 4 + 3", 1687), ("(8 + 5 + 4 * 4 + 6 * 9) + 8 * 6 * 3", 12132), ("8 + 6 + 3 + ((2 * 9 + 2) + (7 + 7 + 3)) + 6", 60), ("(4 + 5 + 8) * 8 + (7 * 9 + 3 * 3 + 9 + (8 + 5 + 7 + 3 + 9)) + (3 * 3) * 8", 3072), ("(4 + 4 + 4 * 6 + 4 + 9) * 6 * ((8 + 6 + 3 + 2 * 8 + 2) * 4 + 6 * 8 * 7) * 5", 88821600), ("6 * 6 + 3 * (2 + 7 + 3) * 4 + 5", 1877), ("((2 * 4 + 3 * 3 * 9 * 3) * 7) + 2 + 8 + 6 * 2", 12506), ("5 * (5 * 4) + 6", 106), ("((7 + 6) + 7) + 3 * 2 * 9 * 6 + 4", 2488), ("6 + 8 + ((4 * 9 + 5) * 4) * (5 + 7 + 8 * 8 * 2) + 9", 56969), ("8 * 4 * 8 * 9 * 2", 4608), ("5 + 2 + (8 + 9 * 6 * 7 * 6) * 8", 34328), ("6 * (9 * 5) + (5 + 2 + 6 * 8) * 6 * 6 * (4 + 7 + 8 * 8)", 2046528), ("2 * 3 * 6 * 8", 288), ("3 + (4 + 5 * 8 * 8) * 2 * (9 * (5 * 3 + 8 + 6) * 2 + (5 * 7 * 3) * (4 + 5) + 7)", 6542700), ("6 * (5 * 4) * 5 + 4 + (6 + 2) + 6", 618), ("2 * (4 * (7 + 2 + 3 + 3 * 8) * (9 + 3 * 3) + (6 * 8 * 5 * 7) + (6 + 5) + 7) * (3 + 8 + (5 + 4 + 8 + 6) * 3 + 2 + 3) * 8 + (3 * 3) * 9", 292413105), ("(5 + (4 * 8 * 7) + 7 * (7 * 9 + 2 + 5 + 6)) + 4", 17940), ("6 + ((3 + 9) * 4)", 54), ("9 + ((4 + 4 + 5 * 6) * 8) * 2", 1266), ("(4 + 2) * 3 * 3 + 3", 57), ("5 + 2 + (8 + 7 + 5)", 27), ("6 + (7 + 4 * 9 * (6 + 8 * 8 + 3) * 8)", 91086), ("3 + 3 * 6 * 3 + (4 * (2 + 6 * 7) * 8)", 1900), ("7 * 5 + 8 * 7 + (9 + 4 * (7 + 6 + 2 * 7 * 9) + 9 + 9 * 4) + (3 + 6 + 5 * 6 * 4 + 9)", 49858), ("5 + (9 * (5 * 7 * 6 * 8) + (8 * 3) * 6 + (2 + 7 * 8)) * (9 + (5 + 7 * 2 * 6 + 9 + 7) + 4 + 8 * 3) * 7", 345666741), ("(6 + 7 * 7 * 9 * 4) * 3 + (5 + 7) * 7 * 5 * 6", 2066400), ("(9 + 6 * 5 + 3) * (2 + 6 + 6) + 4 * 6 + 3", 6579), ("5 + 8 + ((9 + 8) * (3 * 3 + 8 * 8) * 2 + 3) * 6 * 4", 111360), ("((3 + 9 * 2 * 8 * 7) * 7 * 8 + 3 + 7) * (8 * 9) * 5", 27098640), ("5 + 3 + (4 * 4 * (8 * 8 + 4 * 4) + 4 + 5 * 6) * 4 + 2 + 7", 104705), ("5 + ((6 + 4 + 9 + 3) * 6 + (2 + 4 * 9 + 4 + 7 + 7)) + 4 + 9 * 8", 1776), ("2 + 4 * 7 * 5 * ((5 + 4 + 6) + 4 * 4)", 15960), ("8 * 6 + (4 + 8 * 5 * 6 + 4 * 9) * 9 + (2 + 8)", 29926), ("((8 + 3 * 2 * 6) * (7 + 8 * 8) * 9 + (2 + 5) + 4) * (2 * 9 * 5 + (9 * 4 * 2 + 7 + 8) * 2 + 2) * 6", 304531656), ("4 * ((5 * 5 + 6 * 8 * 5 * 9) + 4 * (3 + 7 * 6 + 4) * 4) + 2 * ((9 + 8 + 9) + 9 * 2) * 8 + 4", 6401885284), ("2 * 8 * 6", 96), ("(7 + (7 + 8 * 9) * 7 + (5 * 8 * 6 * 9 + 6 * 4)) + ((5 + 9 * 6 + 7) + 8 + 7 + (8 * 7 * 4 + 5 + 2) * 5 + (9 + 3 + 9 * 2 * 6 * 3)) * (4 + 5 * 4) + (8 * (5 * 5) * 9 * (3 * 3) + 5) * 4", 1807076), ("(6 + 5 + 5 * 5) * 4 + ((8 + 6 + 8) + 5 + 5 + 7 * 9)", 671), ("9 * (9 * 2 + 4 * 2 * 4)", 1584), ("4 + (6 + 2) * (4 + 2 + 2 * 5) + 2", 482), ("5 * (6 + 8 + 5 * 2 * (7 * 2 + 2))", 3040), ("((7 + 5) * 2 * (3 * 5 * 9)) + 7 * (7 * 5 + 9 * 9 * (5 * 9))", 57861540), ("7 + 5 * (2 * 3 * 4 + 9 * 7 * 9) + (2 + 8 + (3 * 6) * 7 * 7 * (5 * 8 * 7 + 8 * 6 * 9)) * 5", 106811460), ("9 * 3 * ((9 + 7) * 7 * (2 * 9 + 5 * 9 * 7 + 8) + 6 * 6 + 6) * (9 + 7 + 6 + 9 * 7)", 5736816414), ("8 + 9 * 4 * ((7 * 3 + 6 + 6 * 7 + 9) + 8 * 5 * 2)", 168640), ("3 * (3 * (5 + 5 + 5 * 2))", 270), ("4 * 4 * 8 * 6 + (3 + (5 + 5 + 5 + 6 * 6) * 8 * 9 + 9) + 3", 10068), ("(3 + 8) + 4", 15), ("6 + 5 + 3 + ((2 + 5 + 6) + (9 + 5 * 4 * 9) + 6 * 7 + 5)", 3680), ("(6 * 8 * (2 + 2 + 8 + 8 + 2) + 7 + 6 * 3) + ((7 * 3 * 9) + 2 * 4 * 4 + 2) + 5", 6270), ("6 * ((6 * 8 + 3 * 9) + 2 * 9) + 3 * (6 + (3 * 7 * 4) + 4 * (6 * 8 * 3 * 7 + 3 * 8) * 6 * 7) * 6", 4769979979968), ("5 * 8 * (7 * 7 + 4 * 7) + (2 * 4 + (3 * 2 * 4 * 9) + 4 + 2)", 15070), ("(3 * 8) + 3 + 6 + (3 * 3 + 9 * 6 * 8) + 3 + 5", 905), ("((6 + 5 + 7 + 3) * 7 + 9 * 5) + 9 + 2", 791), ("3 + 2 * ((9 + 9) * 8 + 5 * (6 + 4 * 6) + 4 + 7) + 9 + 4 * 4", 179072), ("5 * 6 + (5 + 6 * 8 * 5 * (8 * 2 + 7) * (7 * 6 * 2 * 2 * 7 * 6))", 71406750), ("8 + 4 + 3 + (4 * 7) * 2 * (2 + (3 + 8 + 8 * 2 * 9))", 29584), ("7 + 5 + 3 + ((9 * 9 + 2 * 8 * 6 + 5) * 2) + (3 * 7 + 6 * 4 * (8 * 6 + 8 + 8 + 7 * 3) + (9 + 3 * 8 * 6 + 4)) * (9 * 6 * 9 * 6)", 92078532), ("5 + (2 + (6 * 3 * 3 + 9 * 8 * 8) + 3) + 9 * 6 + 6", 24312), ("6 + (2 + (3 * 5 + 2 + 4)) + 7 * 9 * (8 * 9 * 6)", 139968), ("((4 * 4) + 2 + 7 + (5 + 3 * 2 + 9 + 8 + 4) * 5) * (2 * (6 + 8 * 9 + 7) * 9 + (7 + 5 * 7) * 8) + 6 * 3 * 3", 55309014), ("(7 * 5) * (5 + 3 + 5)", 455), ("(2 * 6 * 9 + 9 + 6) + 9 * 8", 1056), ("6 + (9 + 6 + 7 * 7 * 3 + (9 + 8 + 2 * 3 + 4 + 7)) + 9 * ((2 * 5 + 4 * 6 * 6 * 7) + (6 + 5 * 4 * 5 * 8) + 9) + ((5 + 7) * 5 * 4)", 2887105), ("(7 * 2 + 7 * 8 * (7 + 6)) * 2 * 2 * 2", 17472), ("(6 + 5 * 2 + 3 + 5) * 8 + 4 + 2", 246), ("3 + 4 + 3 + 7 * ((2 * 8 * 8 * 3 + 4 + 4) * 8 * 2 * 9 + 4 + 9)", 959837), ("7 + (5 * (7 * 9 + 7 + 2 * 7) + 9 + 3 + 5 + (8 * 9))", 2616), ("8 * (2 * (8 + 4 * 3) + 7 * 7 + 5 + 8) + 3 + 6 * 8", 36296), ("(8 + 3 * 5) * 6 + 2", 332), ("3 + 8 * ((3 * 8) + 8 + 5)", 407), ("5 * 9 * 5 + ((5 + 6 + 7) + 4) + ((5 + 8 + 3 + 4 + 3) * 8 * 3)", 799), ("7 * (6 + 4 + (7 + 4 + 4 + 6) * 3 * 3 + 2) + 7 + 8 + 4 + 3", 1989), ("2 + ((3 + 8) + 2 + 9 + 4 * 3)", 80), ("4 + 9 * 3 + 9", 48), ("(7 + (7 * 4 + 7) * (6 * 6 * 9 * 4) * (2 + 5 + 8 + 3)) * 3", 2939328), ("(8 + 2 + 4 * 7 * 3) + 2 * ((6 + 2 + 2) + 7 * 8 * 8 * 5 * 8) + 7 + (5 + 8 + 2 * (9 * 9) + 3)", 12883145), ("8 * 2 + 6 * ((5 * 3) * 6 * 2 * (7 * 2 + 4 * 4 + 9)) + 4", 320764), ("4 * 3 * (8 + 7 * (2 + 4 + 7 + 4 + 3)) * 9", 32400), ("7 + (6 + (6 + 2) + 8 + 9 + 3) * (3 + 9 * (3 + 5 + 6 + 7 + 6) + (8 * 8 * 7) + 5 + 8) * 9 * 2 * 8", 4634640), ("3 + 6 * (3 * 5) * (9 + 4 * 3) + (5 * 6 + 3) * 6", 31788), ("6 + (5 * 6 * 7 * (2 * 4) * 9) * 7 * 7 * 6 * ((2 * 6 * 2 + 3) + 7 + 9 * 2 + 6 * 6)", 2454768288), ("(4 * 4 * 2) * (4 + 3)", 224), ("7 * 8 * 9 * 6 * 2 + (8 * (8 + 6 + 6) + 3 + 5 + 2)", 6218), ("(9 + 2 + (8 * 9 * 5 + 7) + 3) * 9 * (7 + 8 + 3 * 4 + 5) + 8 * (5 * 5 + (4 + 5 + 5 * 3 + 8) * 4) + (7 + 3 + 7 + 4)", 79212321), ("8 * (2 * 2 + (8 + 7 * 9 * 2) * (8 * 2 + 5 + 4) * 9 + 8) * 6 + 3 + (4 * 3) * 7", 20717193), ("(5 + 7 + 9 * 6 + 4) * 9", 1170), ("(3 + (5 + 3 + 4) * 3) + 3 + 8 * ((5 * 8 * 6) + (8 + 6 * 4 * 4 + 8) * 8 + 2 * 4 + 7) + (2 * (5 * 5 * 3) * 2 * 9)", 849364), ("(8 + 2 * 8) + 9 * 8 + 7", 719), ("4 * (2 * 3 + 8 + 3 * 5) * ((3 * 3 * 8 + 7) * (7 + 5 + 8) * 6) + (9 * 5) + 8", 3223253), ("7 * (6 * 3) + (7 + 8 + (2 + 5) * 3) + 7 + 6", 205), ("5 + 9 * 2", 28), ("9 * 2 + 8 * (3 * (6 * 7 * 7) * 8) + 9", 183465), ("((2 + 8 + 7 + 6) + 4 * (6 * 5 + 7 * 4 + 5) * 8) * 9 + (7 + 2 * 5 * 5 * 3 * 3) + 3", 299460), ("6 + 3 * 3 + (8 + 4)", 39), ("(8 + (8 * 2) + 4) * 5 * 4 + 5", 565), ("(5 * 5 * 5 * 8 + 8 + 7) + (6 + 9) + 4 * 3 + 4", 3106), ("(3 + (2 * 9 + 2 + 9 + 4) + 2 + (5 + 3 + 2)) * 5 * 3 + 5", 725), ("6 + 3 * ((8 + 7 * 8 * 7 + 9) + 3 + 3 + 9 * (7 + 5 + 9) * 9) + 5 + (7 * 8 + (5 * 7 + 5 * 9 + 4))", 1470089), ("(4 * 9) + 7 * 9", 387), ("(3 + 7) + 2 + (5 * 2 * 4 * 6 + 5)", 257), ("5 * 4 * 2 * ((9 * 4 * 7) * 2 * 3) + 3 + 6", 60489), ("(5 + 2 * 7 * 7) * (4 * (3 * 8 * 2) * 3 * (2 + 3 * 8)) + 4 * 6 + 8 + 7", 47416359), ("7 * 4 + 2 + (6 + 2 * 5 * 2 + 6 * 9) + 7 * 2", 1622), ("8 + (4 * 4 * 7 * 9 + 5 + 6)", 1027), ("(4 + 7 + 8 * 6) + (3 * 5 + 4) + 4", 137), ("6 + 2 + 3 + 2 * 3 + 9", 48), ("6 + ((7 * 6 + 5) + 4 + 9 + (5 + 6 * 6 + 5 * 2 * 9) * (2 * 9)) + 9 + 5 * 2", 48208), ("8 + 3 * 4 * 3 * (3 * 9 * 2)", 7128), ("9 * (7 * 7 * 4) + 3 + (9 + (6 + 6 + 2 + 3 + 5 + 6) * (3 * 7 * 9 * 3) * 6 + 8 * 3)", 379413), ("5 * (9 * 2 + (6 + 2 * 5) + 5)", 315), ("4 + 3 + 9 + 7 + 5 + (3 * (2 + 8 * 6) * 4 + 2)", 750), ("3 * ((2 + 5 + 2 + 6) + 3 + 4 + (7 + 9) * (7 + 8 * 4 + 9) * 3) + 9 + (8 + 6)", 23621), ("8 + 4 * 4 + 7 + ((3 * 9 * 2 + 2 * 8) + (3 + 6 + 2 * 5 * 4 * 8) * 8 * 8)", 141367), ("4 + 4 * ((5 + 3 + 2 * 4 + 7 * 8) * (5 * 6 + 9) + 5 * 3)", 352056), ("7 * 8", 56), ("3 + (5 * 3 + (5 * 9) * 2 + 4) + 2 + 3", 132), ("6 + 8 + 3 + (2 * (6 + 5 + 3 * 8 + 9) * 3 * 9) * (6 * 8)", 314448), ("2 * 9 * 4 * (6 * 2 * 6 * 3 * 8) * 4", 497664), ("6 + (3 * 4 * 7 + 5 * 5 + 2) * 4 + (6 * 5 * (6 + 2 + 9 + 6 * 8) * 2 + 5) + 4", 12861), ("6 * ((6 + 4) + 9 * 5 * 3 + (9 * 5)) * (4 + 2 * 7 * (4 * 9 * 3 * 8) * 4) + 3", 287400963), ("7 * 2 + 6 * (3 * 6 + 6 * 5) * 7 * 7", 117600), ("3 + 8 * (3 * 2 + (9 * 3 + 8 * 7 + 8 + 4) + 6 + 3 + 5) + (6 + 8 + 7 * 3) * 9 * (4 * 3 * 6 + (9 + 9 * 9 * 2 * 6) + 4 + (6 * 4 + 5 + 9 + 9 + 7))", 58051260), ("4 * 8 * (8 * 5 + 3 * 6 * 7 + 9) * 9", 522720), ("8 + 4 * 9 * 4 * 8", 3456), ("(3 * 7 + (5 * 2 + 7 + 5 * 6) + 9 * 5) * 6 + 6 + 2 * 5", 24340), ("(8 + (4 * 8 * 8) * 7) + 4 * 8 * ((4 * 4 * 5) + 8 + 8 + 2) + ((6 * 8) * 8 * 8 * 8 * 2) + 8", 1501128), ("4 * (6 + 2 + 6 + 9 + 7) * 4 + 7 + 9", 496), ("5 + (2 + 6 * 8 + 5) + (6 + (8 + 9 + 5) * 4 * 3) * 4 * 5", 8200), ("9 * 6 + 5 * (4 + 2 + (7 + 9 * 6)) + 5 + 6", 6029), ("8 + ((8 + 3 + 5 + 3 * 8) + 5 + 3) * 4 * 3", 2016), ("2 + (3 + 5 * (8 * 2) + 8 + 5) * 8 + 4 + (8 + (9 + 8) + 8 * 9 * 7) + 9", 3236), ("7 * (4 * 2 + 5) * 8", 728), ("3 + 5 + 7 + (6 + 2 * 7 * 7 * 5) + ((3 * 4 + 8 * 5 + 6) + 4 * 5)", 2525), ("(9 + 6) * 7 * (9 + 3 + 4 * (8 + 8 * 3 + 6 + 8 * 2))", 208320), ("2 + (6 + 5 + (7 * 5 + 5 + 9 + 7 + 6) + 2 + 2 * (8 + 8))", 1234), ("4 * 9 + 2 * 9 + 9 + 8", 359), ("((2 * 7 * 5) * 8) * 8 + 4 + 8 * 4", 17968), ("7 * 5 + (8 + 9) * 3 * 6", 936), ("8 + ((9 + 7 + 8) + (8 * 5) + 2 + 7 + 3 + 3) + 3", 90), ("6 * (5 * (7 + 6 + 5 * 9 + 8 * 5) * 6) + 7 * 9 * ((2 + 5 * 8 * 2 + 3) * 3 + 7 + 5 * 3) * 2", 2949668946), ("3 * (3 + 5 + 4) * 6 * 9", 1944), ("6 + ((8 * 5 + 3 + 9) * (5 + 2 * 4 * 5 + 5) + (2 * 3) + 4 + 7) + 7 + 8 * 6 + 4", 45472), ("((9 * 2 + 8 * 9) * 4 + 5 * 3 * (8 * 2 * 7)) + (7 + 4 * 2 + 6) * 9", 2845836), ("(6 * 5 + 7 * (5 * 5 + 4 + 7 * 7 + 6) + 2) * ((4 + 6 * 5 * 6 + 7) + 9 + 5) * 7 * (4 + 7 * 6 + 5) * 5", 7616296380), ("8 * (3 * 6 + 5) + 9 * (9 + 6 * (4 * 6) + (7 + 8 + 5 + 3)) * (3 * 7 * 8 * 2) + 9", 24836793), ("8 * 3 + (5 + 3) + 8 * 4 + (4 + (7 + 9 * 5 * 3) * 6 + (7 + 5 + 4) + 8 * 8)", 12064), ("2 * 3 + ((8 * 8 * 8 + 4) * 7 * 7) * 5 * 8", 1011600), ("(6 * (7 + 3 + 8 * 5 + 2) + 2 * 4 + 5 * 5) * 2 * (8 + 3 + 3 + (6 + 4) * (9 * 3)) + 6 * 9", 129528774), ("8 * (7 * 6 * 8 * (3 * 6 + 4 + 6 + 2 + 2) * 6) + 8 * 8 * 6", 24772992), ("(7 * 5 * 5) * 7 * ((3 + 6 + 3 + 4 + 2 * 2) * 8 * (7 + 9 * 9 * 9))", 457228800), ("((5 + 7 * 9 * 2 + 7) + 7 + 5 * 6 + 3) * 6 * 2 * 3", 50868), ("5 + (5 * (9 + 9) + (7 * 7 * 4 + 2) * 3)", 869), ("((8 * 8 + 2 + 8 * 9) * 5) + (2 + (9 * 6 + 9 + 7) * 7)", 3834), ("3 + ((7 * 4 * 4 * 5) * (8 + 3 * 4 + 4 * 9) * 5 * 3 + 7) + 4 * 2 * 7 * (3 * 6 * 6)", 5486766768), ("((9 * 7 + 6 + 7 * 9 + 2) * 4 + 3 + 4 + 4 * 6) * 8 + (4 + (8 + 2 * 6 * 4 * 3)) + (5 + 2 * 6 * (4 * 5 + 4 + 2)) + 4 * (6 + 3 * (2 * 2 * 6 * 3) + 8 + 4 * 5)", 442398000), ("(5 * (7 + 9 + 5) + 6) * 5 * (6 + 7 * 9 + 6) * 9 * 5 + 9", 3071934), ("(4 * 4 * 6 * (5 * 8 + 3 + 8) + 5) + (9 * (3 * 9 + 3 * 9) + 5 + 8 + 2 * 3) * 3 * 2 + 8 * 5", 367120), ("7 + 5 * (3 + 8 + 6 * 9 + 5 * 8) * ((9 * 9 * 4 * 9 + 3) * (6 + 9 * 5) * 8 + 4 + 6)", 26565386880), ("7 + 8 * ((3 + 7 * 5) + 3 * 2 + 2 * 3 + 7) * 9 + 8 * 7", 312851), ("3 + 4 + (5 * (9 + 9 + 3 * 6 * 4 * 3) * 4) * (4 * (7 * 6 * 3 + 5 * 2 * 9) + (7 * 3 + 5))", 286076126), ("3 * (2 + 8 + 2) * 6 * (4 * 4)", 3456), ("2 + 2 + 3 * 5 + (3 + (6 + 2) + 9 + 7) * (3 * 3 + 5 + 8 + 7)", 1798), ("4 + 5 + 6 * 6 * 6 + (3 * 2 * 3 * (2 * 6 + 9) + 6 + (5 + 2 + 9 * 6))", 1020), ("((4 + 9) + 2) * 7 + 3 * 4", 432), ("2 + 6 * ((2 * 7 * 8 * 3 + 8 + 4) + 9 + 6 + 9 * 2 + 9) + 7 * 6", 36186), ("9 * 7 + ((2 + 5 * 2 * 7 * 8) + 6 * 2 + 3 + 4) * 5 * (5 + 2 * 7) * 8", 3234000), ("4 * (8 + 5 * 6 * 8) + 2 + 3 * 7", 17507), ("(2 * 2) * 9 * 6 * 3 + 9", 657), ("9 + 2 * (7 + 5 + 7 + (3 + 7 * 2 * 2 + 3) * 3)", 2046), ("(2 + 5 * 9) * (4 * (9 + 2 * 4 + 3 + 2) * 2 + 8 + (6 * 7 + 9 + 5)) * 3 + 8", 86192), ("(6 * (6 + 7 * 7) + 7 * 6 * 7) + ((7 * 6 * 4) * 6 * (8 + 8 + 5 * 7 * 8 + 8) + (4 + 5 * 5 + 5 + 3 * 9) + 8)", 1217183), ("9 * (6 * 9 * (8 * 2 * 6) + 4 * 4)", 186768), ("(5 + 5 * 5 + 8) * 6 + 5 * 2", 706), ("4 + ((8 + 7) + 5) + 6", 30), ("9 + 6 * (7 + 4 + (9 + 4 + 2 + 8)) + (8 * 5)", 550), ("(3 * 8 + (6 + 9 * 8 + 6)) + 3 + 4 * 8 + 5 * 3", 3783), ("3 + 6 * (7 * 8 * 6 * (5 + 8 + 6) + 5 * 4) * ((8 + 9 + 6 * 8) * 9 + 6 * 6 + 2 * 2) * 4", 18352479168), ("7 * (6 * (5 * 5 + 9 * 7 + 5 + 9) + 8 + 9 + 2 * (6 * 7 * 7)) * 3", 9452394), ("4 + 2 * (5 * (3 * 8 * 3) * (5 + 9 + 8 * 9) + 9 + 7) * 7 + 5", 2994437), ("6 * 5 * (5 * 3 * 9 * 4 * 2) * 9 + 7 * 4", 1166428), ("3 * (4 * (7 + 2) + 4 + 6 + (3 + 6 + 6 * 5)) + 5", 368), ("7 * 7 * (5 + 9 + 9) * (8 * 6 * 5 + 4 * 2)", 549976), ("6 + (9 * 4) * ((4 * 2 * 4 * 4 * 6 * 7) + 9 + (2 * 9 + 9 + 9)) + 2 + 4 + 4", 227692), ("9 * (6 * 5 + 9 * 2 * 4) + 7 + 8 * 8 + 9", 22593), ("(6 + 7 + 8 * 2 * 4) * 5 + 2 + 2 * 5 + 6", 4226), ("8 * 7 * (9 * 2 * 4 + 3 + 4 * 4) + (8 * 8 + 9 + 6) + ((7 * 7 + 2 * 9) * (2 * 8 + 2) * 6 * 6) + 8", 315215), ]; // Find shortest failures first, that should make it easier to understand. ts.sort_by(|l, r| l.0.len().cmp(&r.0.len())); for (input, want) in ts { let got = parse_part1(&lex(input)); assert_eq!(got, want, "got {}, want {} for {}", got, want, input); } } #[test] fn comprehensive_part2() { let mut ts = vec![ ("(7 * (3 + 8 + 8 + 7) + (6 + 8 * 2 + 5 + 2 * 6) * (5 + 2) * 9) + ((7 * 4 + 8) * 6 * 8 + 9) * 7 * 2 * 2", 9896040), ("6 * ((9 + 4) * (6 * 7 + 5 + 8 * 2))", 18720), ("7 * 8 + 2 + 8 * (8 * 4) * (4 + 8)", 48384), ("(9 + 3 + 2 * 5 * 8) + 9 + 5 * 2 * 5 * (6 * 6 * 4 + 6 * 9 * 3)", 55792800), ("6 * 6 * 4 * (6 + (3 * 9 * 2) + 9 + (4 + 7 + 7))", 12528), ("7 * ((4 * 6 + 4 + 6 * 8 + 6) + (2 * 7 * 8 + 5 * 3 + 7) + (5 * 5 * 5 * 7) + 8 * 7)", 176351), ("(8 + 9 * 7 * 9 + 6) + (7 + 5) + 6", 1803), ("5 * (6 * (3 + 2 + 9)) + 8 + 3 + 5 * (4 + 3 * 8 * 8 * 6 * 2)", 2688000), ("4 + (3 + 4 * (4 + 9 + 3) * (4 * 8 * 4 * 9))", 129028), ("4 * 4 * 6 * 2 + ((8 * 4 * 3 + 6) * 5) + 6", 139008), ("(8 * (8 + 5 + 5 * 7) * 9 + 2 + 9) * 4 + 9 * ((3 + 3) + 8) + 9", 6027840), ("((9 + 8 * 3 + 2 + 9 + 8) * 3 + (3 + 7 * 6) * 9 * 2) + 3 * 7", 2968833), ("5 + 5 * (5 * (6 + 6 + 6 + 7) * 7 + (9 * 4) * 4 * (8 * 9))", 15480000), ("7 * (2 * 7 + 3 + 5 + 5 * 2) + 4 + 3 * 3 + 5", 4872), ("(4 + 5 * (2 * 4 + 5 * 2 * 7 + 5) + 2 + 9) + 4 + 9 * 9 * 3", 108000), ("7 * 6 + (6 * 2 + 4 + 5 * 8) + (6 * 2 * (4 * 7 * 2) + 9 * (5 * 2 * 4) + (3 + 2 * 5)) * 8", 2869104), ("2 + ((9 * 3 * 3 * 3) * (5 * 9 + 6 + 7 + 6 + 8) * 3)", 131222), ("7 * ((9 + 7 + 4 * 3 * 4 + 4) + 4 * 3) * 5 * 3 * 7", 1067220), ("8 * (3 + 5 * 9 + 4) * 6 + 4", 8320), ("7 + 6 * 7 * ((7 * 6 * 2) * 3) * 5 * 7", 802620), ("8 + 5 * 4 * (3 + 5 * (8 + 5 * 2) + 6) + 6", 13624), ("4 * 8 + ((3 * 5 * 4) + 7) + (4 * 2)", 332), ("((5 + 8 + 7 + 6 * 6 + 3) + 4 * 3 * (5 * 2) * 5 * (2 * 9)) + 6 + 3 * (2 * (2 + 4 + 8) * 4) + (9 + 3 + 6 * (9 + 5 * 6 * 3 * 8 * 5) + (4 * 6) + (6 * 3 + 2 + 8))", 117846779292), ("(3 + 4 + 8) + 6 * (7 * 6 * (9 * 3 * 5 * 5 * 4 * 5) + (6 + 4) * (5 * 2 * 3 + 3) + (2 * 7)) + 2 * 4", 3527082888), ("6 * (6 * 9 * (3 * 9) * 4 + 9) + 6", 113760), ("4 + 6 * 7 * ((3 + 5 + 3) * (6 + 3 * 9 + 6 * 8 * 9) + 6 * 4) * 8", 239648640), ("5 + (6 + 9 * (7 * 8 * 8 * 3 * 4) + 2) * 4 * 2", 645400), ("(2 * 7 * 6 + 9 + (3 * 6 + 4 * 7 + 5) + 8) + 7 + 7 * 8", 43008), ("2 + (6 + 4 + (5 + 5) * 7) * 2 + 7 * 5", 6390), ("4 + 9 * 3 + 8 * 6", 858), ("(5 + 5 + 9 * 8 * (4 * 5 + 6 + 3 * 8 * 3) + 6) + 9 + 9", 205218), ("(8 * 4 * 7 + 9 + 6 * 9) * (9 + 2 * 2) + 3", 158400), ("((9 * 4 + 8 + 4 * 2 + 2) * 3 + (6 + 9 * 5 * 4) * 4 + 6 * 5) * 5 * 3 * 5 + (3 + 5 * 4)", 4843152000), ("5 + (5 * 3) * (2 + 8) * (3 + 6 + 4 * 6 + 7 + 7) * 5 * 7", 1820000), ("6 * 6 * 7 * (5 * 4 + 2 + 6 + (8 + 6 + 4 + 9 * 5))", 185220), ("2 * 9 + (2 * (8 * 7 + 6 + 5 + 3) + 2 + 9 * (3 * 9 * 4 * 7 * 7 + 5) + 3) + (4 + 6 * 4 + 6)", 6497918), ("(9 + (8 * 8 + 2 + 2 * 6 + 6)) * 8 + 4 + 3 + (9 + 3 + 9 + 9 * 4 * 8) * 2", 2263950), ("8 * 4 * (4 * (3 + 7 * 7 + 3) + 8 * (5 + 2 + 3) * 2) + 9", 276768), ("5 + (6 * (3 * 3 + 7 * 3) * (4 * 4) + 2 * 4 * 4)", 155525), ("3 + (5 * 8 * 9 * 3 + 9 * (6 * 7)) * 9 + 3", 2177316), ("3 * (9 * 3 + (5 + 4 * 7 + 3 + 8)) + 4 * 2 * 3", 26802), ("8 * 9 + 6 + (7 + 7 + 9 * 8 * 5 * 6) * 5", 221400), ("(8 + 9 + 3 + 7 * 7) + 2 + 9 + (8 + 7 + 4 + 2) + 9", 230), ("4 * (2 * (7 * 4 + 2 + 9 + 6 + 7) + (4 + 2) * 3 + 9 + 6) + 6 * 4 + 7 * 5", 1601160), ("(3 * 4 + (5 * 8 * 2) * (7 + 8)) + 7 + 8 + 5 + ((6 * 9) * 4 * 5)", 4880), ("4 + ((9 + 9) + (7 * 8 + 2 * 8 * 2) + 9) + 2 + 7 * 2", 2320), ("8 * 3 * (9 + 5 + 8 + 5)", 648), ("4 + 4 + (6 + 2 * 7 + 9 + 6 * 5)", 888), ("((8 + 3 * 8 * 2) + 7 + 7 * (7 * 7 * 7 + 3) * 9 * (9 * 4 + 7)) + 4 + 6", 82952110), ("6 + (7 * 2 + 4 + 5 + 4) + 9 + ((7 * 9) * 7) * 5", 2805), ("(7 * 3 * 2) * ((9 + 6 * 2 * 6 * 3) + (6 * 7) + 3 + (6 + 5 * 5 + 4 + 9 * 6) * 4 + 9) + 4 + 7 + 6", 968772), ("9 * (3 * (9 + 8)) * 4", 1836), ("6 * (4 * 2 * (9 * 5 * 4 + 7 + 9) + 6 + (3 + 6 * 2)) * 5 * (3 * (2 + 6 * 8 * 6 + 3 + 7) * 8 * 7 * (9 * 8 * 7 + 7 + 9) * 7) + 3 + 6", 442232672777280), ("7 + 3 * ((6 * 3 * 9) + 3 * 9)", 14850), ("7 * ((4 + 4 * 4 * 9 * 7) + 2 * 9) * 8 * 6 * 6 + 3", 54921888), ("6 + 5 + (5 + 3 * (3 + 7 + 9 * 3) * 6) + 3 + ((2 * 3 * 4 + 4) * 6 + (3 + 3) + 2)", 3422), ("9 + ((8 * 9 * 3 * 2) * 5 + 8)", 5625), ("(2 + 7) * 3 * (8 + 5) + 9", 594), ("4 * (5 + 4 + 6 * (9 * 4 + 8 * 4 * 7 * 3) * (4 * 4 * 6) * (9 + 7 + 8 * 4)) * (4 + 4 + 9 + 8) + 7 * 8 + 5", 2086844497920), ("((7 * 4 * 4 * 3) * 4 + 2 * 2 + 2) * 9 + 9 * 8 + 9", 2467584), ("4 + 6 + 2 * (5 + 3 + 8 * 4)", 768), ("((7 + 6) + 3 * 3 * 5) * ((9 * 3 + 5 + 8) + (3 + 8 * 8 + 7 + 5 * 6) + 2 * 5 + (7 + 9 + 2)) + (4 * 2 * (5 + 8 + 5 + 3) * 5 + 6 * 2) + 6 * 5 * (2 * (9 + 4) * (7 * 8) * 8 + 7)", 980703360000), ("6 + 5 + 5 + 2 * 5", 90), ("5 + 5 + 8 * 8 + 2 + 6", 288), ("(3 * (4 * 6 * 8 * 2)) + 3", 1155), ("(5 + 6 * 3 + 5 * 2) * 5 * (3 * 5 + 2 * 7 * 9 * 3) + 5 * ((6 + 2 * 7 + 2 + 4 + 2) * 9 + 6) + 7", 6319295840), ("(7 + 7 * 4 * 7) * ((8 * 5 * 9) + 6 * 9 + 3 * 3 * 9) * 8 * ((3 * 5 * 2 + 6 + 5) * 7 + (6 * 2 * 7 * 7) + 8 + 8 + 6)", 44742672898560), ("(3 * 6 + 7 + 6 + 3 + 7) * 4 * 7 * ((9 + 3 + 6) * 5 + 3 + (5 * 7 + 4 + 5 * 2) + 5) * 5 * 9", 341356680), ("7 * ((7 + 6 + 2 + 9) + 3 * 4 + 9 + 2 + 2) + 2", 3227), ("3 * 8 * 2 * (6 * 2 * 2 + 4 * 8) + 8 + 7", 28368), ("8 + 3 + ((4 * 6 * 5 * 7) * 9 + 9 + 8 * 4)", 87371), ("(6 + 4 + (6 + 3 + 3 + 3) + 6) * 9", 279), ("2 * 6 * (5 + 2) * (6 * 6 + 7 + 2)", 7560), ("4 + (8 + 2 + 4) * 4 * 5 + (9 * 5 + 9) + 8", 10008), ("6 * 3 * 9 + 6 + (2 * 4 * 3 + 2 * 5 * 3) * 6", 66420), ("2 + (8 + 5 * 7 + 4 + 7 * (2 + 9 * 6 * 5 * 3 + 3)) + 9 * 4", 1853324), ("(9 + (2 + 6 + 7 * 4 * 8) + 9 * 4 + 9) * 3 + 8 * 8", 569712), ("2 * (9 * 5 * 9 + (8 * 9 + 5)) * 8 * 8", 696960), ("3 + 6 + 2 * 3 * 9 + 9", 594), ("8 * 7 + 8 * (5 + 6) * 5 + 4", 11880), ("4 * (6 * 2 * (3 + 6 * 3) + 7 * 5 + 6)", 17952), ("(7 * 3 * 7 * 4 * 3 * 2) * (9 + 8 * 9) + 9 * (4 * 5 + 3 + 5 + 9)", 50295168), ("9 + 8 * 3 * 4 + (9 + 8 * 9) + (4 * (6 * 4 * 9 * 5 + 6 + 4) + 8 + 7 + (4 * 9))", 679371), ("2 * (4 * (3 + 4 + 8 + 5) * 8 * 6)", 7680), ("8 * (8 * 2 * 6 + 6 + 6) * 8", 18432), ("(9 + 3 * 4 * 9 + 5 * 5) * 4", 13440), ("(9 * 9 * 4 * 4 + (6 * 2) + (3 + 3 * 2)) + 3 + ((2 * 3 + 8 * 4 * 8 * 2) + 2 + 3)", 10488), ("7 * (9 * (6 + 3 + 7)) * ((8 + 3 + 3 * 3 + 3 + 7) + 4 + 5 + 3 * (6 * 4 * 6 * 6 + 2 * 5) + (2 + 3 + 9 + 3 * 6 + 4)) + 6", 1159629408), ("8 + 6 * (3 + 5 + 6 + 9) * 4", 1288), ("(6 + 7 + 7 + 7 * 6 + 5) + 3 * 5 * 4 * 5 * 6", 180000), ("(2 * 9 + 9 + 3 * 7 + 6) + 3 + 7 + 4 + 9", 569), ("(7 + (8 * 7 * 4 * 7 * 2 + 4) + (5 + 2 * 2 + 2 * 2 * 6)) * 3 * 4 + (4 * 2 + 4 * 6 + 3 * (8 * 6 + 4 * 3 * 7)) * 6", 63692673912), ("2 * (3 * (5 * 7 * 8 * 7 + 8) + (6 * 3 + 5) + 5 + 9)", 25572), ("8 * 4 + ((7 + 2 + 8) + (2 * 8 * 4 * 4 + 4 * 7) * 2) * 5 * 4", 1152960), ("2 * 6 * 2", 24), ("2 + (2 + 6 * 5 * 9) + ((8 + 2 * 6 * 5 * 5) * 7 + 3) + 3", 15365), ("((9 + 4 + 6 * 3 + 9) * 5) * (7 * 2 * 7 * 5 * 2) + 7 + 9 + 7", 1143420), ("2 + 2 * 8 + 8", 64), ("4 + 6 + 4 * 7", 98), ("4 + 5 + 5 * 8 * (8 + 4 + (2 * 8 + 9 * 9 + 4 + 5))", 69888), ("(7 + 2 + (8 * 4 * 2 + 9 * 6) * 4) * 2 + (9 * 2 * 8 * 9 * 4)", 43998024), ("4 + 9 + 6 * (4 * 6) + 7", 589), ("6 + 4 + 8 * (7 * 9 + 7)", 2016), ("3 * 2 + 2 + 9 + (2 * 9 * 2 * 8 * 2 * (2 + 8 + 9 * 9 + 7)) * 7", 3677457), ("9 + 9 + 5", 23), ("(2 + 3 * 3) + 7", 22), ("(9 * 7 + (8 + 8 * 6) + 2 * 7 * 3) + 6 * (5 * (2 + 9 + 9 + 6) + 6) * 8 * (4 + 4 * 6 * 5 + 5) * 8", 97571635200), ("7 + 4 + (4 * 2 + (2 * 7 + 2 + 4 + 2 + 5) + 9 * (9 * 7 + 7)) + 9 + 7 + (8 + 9 * 7 + 2 + (7 * 8 * 5 * 4 + 6 + 8))", 111564), ("(8 * 3) * (9 + 2 * 7 * 7 + 7) * 6 * 8 + 8 + (9 + 9 + 3 * 5 + 3)", 28562688), ("4 * 5 + 2 + 4", 44), ("((7 + 3 * 8 + 3) * 8 + 4 + 4 * 4 + 8) * 5 + 9 * (3 * 9 + 8 * 7 * 9 * 4) + 7", 3802149120), ("(8 + 6 + 7 + 9) + 8 * 6 * (5 + 2 + 3) * 8", 18240), ("(9 * 8 * (6 * 5) + 9) + 4 + 8 + 8 * 8", 22624), ("(4 + 5 * 9) * 7 + 7 * 6 + 8 * (2 + 5 * 8)", 889056), ("(4 + 3 + (6 + 2 + 2 + 6 * 6 * 2) * 4 * 2 * 9) + 3", 14331), ("8 * (5 + 8 + 2 * 7) + 2 + ((5 * 6 + 4 + 7 + 6 * 5) * 7 * 3 + 8)", 355056), ("2 + 5 + (6 * 3 + 2) + 8", 45), ("2 + 9 * 6 * 5 + 5", 660), ("3 * 3 + 7", 30), ("(9 + 4 * 9) + 5 + (2 * 6 * (6 + 9) + 2 + 6) * 2 * ((9 * 6 + 7 * 3) + 5 * 2 + 3 * 9)", 12751920), ("2 + 6 + ((6 * 9 * 9 * 8 * 9) + 9) * (5 + 2 * 5 * (3 + 5 * 8 * 5 * 2 * 9) * 8) * ((7 + 9 + 3 + 6 + 5) * 4 * 5)", 33877509120000), ("3 * 9 * (5 + (3 * 4 * 2 + 8) + 5 * 3) + 4", 10638), ("9 * (9 * 3 + 3 + 4 + 7 + 4) + 3", 1728), ("2 * 9 + 3 * 9 + 5 + 9", 552), ("(6 + (6 * 6 * 6 + 7 + 7 + 5) * 5) + 3 + 4 * 9", 40833), ("(2 * 8 * 8 * 6 * 8) + (5 + (5 * 6) * (8 + 5 + 7 * 7 + 2) + (6 * 4 + 7 + 5) + (3 + 5 + 8 + 6)) * 8 + ((8 * 3 + 3 * 7) * 4 + (3 * 8 * 4))", 557018992), ("4 + ((9 * 2 * 9 * 9 * 7 + 5) * 6) * 7 * 7 + 5 * 8", 70546560), ("(3 * 6 + 6 * (5 + 6 * 4 * 6 + 2 + 9)) * 9 * 9 + (2 * 7 * 2 * 5)", 36110448), ("6 + 2 + (8 + 6)", 22), ("6 + 3 * (3 + 3) + 8 * (9 * 6)", 6804), ("(2 * 8 + 4 + 5) + 7", 41), ("7 + (2 * 9 * 5 * 6)", 547), ("2 + 9 + ((7 + 3 + 3 * 9) * 6 + (5 + 2 + 8 + 5 * 6) * 7 + 8)", 221141), ("((4 + 9 + 8 * 6 + 8 * 9) + 8) * 6", 15924), ("9 * (9 * 3 + (3 * 8 * 8 * 7) * (4 + 8) + 8 * (5 * 3 + 2 + 4 * 3))", 294588900), ("9 * (7 + (3 * 5 * 5 + 3 * 7)) + (5 * 3 + (4 * 7 * 7 + 8) * (3 * 7 * 5 * 6) * 8) * 5 + (2 * 7) * 4", 7291745748), ("4 * ((2 + 3 * 2 * 2 + 3) + 4 * 4 * 4 * 5 + (3 + 3 * 9 * 9 + 7)) * 9", 27029376), ("8 + 7 * 4 * 3 * (5 + 9 + 8 * 7 * 3)", 83160), ("9 + (4 * (2 * 6 + 7) + 5 * 4 + 8 + (6 + 7 * 8 * 2)) + 9 + 5 + 8", 27311), ("3 * ((5 * 2 * 8 * 7 * 2 + 4) * (3 * 3 * 5 + 2) + 7 + 8) * 8 * 2 + 3", 31449600), ("(8 * 2 + 5 + (4 * 9 * 7)) * 5 + (9 * 8) * (5 * (7 * 8 + 4 * 4) + 3)", 270427080), ("((7 * 6 + 9 + 7 + 9 + 9) * 2 * 8 + (6 + 4 * 7 * 2 * 2) * 7 + (2 + 9 + 9 + 5 + 4)) * 5 * 2 + 7", 261273600), ("7 + 2", 9), ("4 * ((2 * 6) * 5 * 5 + 9 * (7 * 7 * 3 + 8)) + 2", 1811048), ("6 * 8 + 5 + 4 * (5 + 8)", 1326), ("4 + 6 * (4 * 5 * 3 * 5 * 5 * 6) * 8 * 5", 3600000), ("7 + ((6 * 6 + 2) + 7 * 7 + 7 * 9 * 6) + 6", 41593), ("(7 + 3 * (2 * 5 + 3 * 9)) + 2 * 2", 2884), ("6 + 3", 9), ("2 * 8 * (3 + 8 * (4 + 6 * 4) * 8 * 2)", 112640), ("8 * ((4 + 8 * 5 + 7) + 6 + (4 + 8 + 4 + 9 * 7 + 9) + 2) + 5", 4456), ("(7 + 7 + 2 + 3 + 6 * 3) * ((7 + 5 + 8 + 5 * 6) + 4 + 6 * (3 + 3) * (4 + 6 * 9 * 6 + 4) * 7) * 3 * 9 + 5 + 4", 24494400000), ("5 * 7 * (5 * (2 + 5 * 7 + 7 * 5) + 9) + 3", 87430), ("8 + 2 * 4 * 3 + (8 + 3 + 4 + 3 + 2 * (4 * 5)) * 5", 80600), ("3 + (8 * 3) * 7 + 4 * 5 * 2", 2970), ("(7 * (7 * 2 * 7 * 3) * 3 + 2 + 7 * 6) * 4 * 6 + 6 + 6", 10668672), ("(5 + 2 + 2 * 8 + (2 * 9 + 7 + 3) + 5) * 9", 4131), ("(6 + (7 + 8 * 2 + 9) + (7 * 3 * 4 * 5) + 6 * 3 * 4) + (3 * 2 * 5)", 7194), ("4 + 7 + (8 * 7 + (5 * 4))", 227), ("8 * 2 * 5 * (9 + 4) + (3 * 7)", 2720), ("(3 + 4 + 8 + 6 + 2) * 9 + 6 + 6 + 3", 552), ("(9 + (3 * 4 * 5 * 8 + 5) + (5 + 8)) + 5 * ((2 + 5) + (7 + 9) * 2) * (6 * 3) + 8", 965172), ("9 * (3 + 9 + 8 * (9 + 7 + 9 + 8 * 6) + 8 * 8) + 2", 296658), ("7 * ((9 * 2 + 8 * 4 + 7) * 4 + 3 + (5 * 3 * 5 + 3 + 4)) * 5 * 7", 45356850), ("5 + 2 + (8 * 8) + 8", 79), ("4 * (4 * 9 + (7 * 6 + 2 * 2 + 5 + 8) * 9 + 7) * 3 * 7", 4564224), ("9 + 9 + (4 * (8 + 2 * 5 * 9 + 9 * 2) * 4 * 7) + (6 + 2) * ((8 * 7) + 9 * (7 + 7 * 7) + 2 + 5 + 2) + 6", 1403518586), ("9 + 4 + (3 * 9 * 3 * 9) + (3 + (2 + 9 + 9 + 8 + 7) + 5 + 9 * 3) * 7 * (4 + 7 * 8 + 7 * (4 * 2 + 5 * 8 + 9 + 8) + 3)", 729144570), ("6 + (2 + 6) * (6 * 2 * 2 + 7) * 4 * 6", 36288), ("6 * (2 + (6 * 7 + 7 * 9) * 6) * 3 * 8 + 3", 900504), ("8 + (5 + 4 + 6)", 23), ("9 + 2 * (5 * 5 * 5) * 2 * 5", 13750), ("4 * 4 * ((3 * 3) * (9 + 7 + 5) + 5 + 9) + 7 * (4 * 2 * 4) * 7", 1154048), ("((4 * 5 * 7 * 7 + 3) * 9) * (6 * (7 * 8 * 7 + 3 + 7) + (4 * 2 + 3 + 3) * 4 + 6)", 743904000), ("4 * 2 + 3 + 2 * (2 + 2 * 2 * 8)", 1792), ("4 + ((3 + 8) * 7 + 2 + (9 + 4 + 9 + 3 + 4 + 6) * (7 * 5 + 8)) + 4 + 5 * 8 + 2", 440570), ("(5 * 2) + 3 + (3 + 9) + 4 + 4 * 5", 165), ("6 + (5 + 8 + 6 + (7 + 5 + 9)) + (3 * 5 + 8 * 3 * 4) * 4 + 4 + 5", 6682), ("((7 + 4 * 6) * 7 * 2 + 6) * 7 + 8", 55440), ("7 * 5", 35), ("2 + 9 * 4 + 9 + 4 + (8 * 9)", 979), ("5 + 5 * ((5 + 6) + 2 * 4) * (8 + 8 * 5) + 3", 43160), ("5 * 5", 25), ("4 * 3 * 4 + 3 * (7 * 9) + 4", 5628), ("4 + 4 * (8 * 3 + 2 * 8 + 2) + 4 + 3", 3256), ("(8 + 5 + 4 * 4 + 6 * 9) + 8 * 6 * 3", 27684), ("8 + 6 + 3 + ((2 * 9 + 2) + (7 + 7 + 3)) + 6", 62), ("(4 + 5 + 8) * 8 + (7 * 9 + 3 * 3 + 9 + (8 + 5 + 7 + 3 + 9)) + (3 * 3) * 8", 504968), ("(4 + 4 + 4 * 6 + 4 + 9) * 6 * ((8 + 6 + 3 + 2 * 8 + 2) * 4 + 6 * 8 * 7) * 5", 727776000), ("6 * 6 + 3 * (2 + 7 + 3) * 4 + 5", 5832), ("((2 * 4 + 3 * 3 * 9 * 3) * 7) + 2 + 8 + 6 * 2", 15908), ("5 * (5 * 4) + 6", 130), ("((7 + 6) + 7) + 3 * 2 * 9 * 6 + 4", 4140), ("6 + 8 + ((4 * 9 + 5) * 4) * (5 + 7 + 8 * 8 * 2) + 9", 78302), ("8 * 4 * 8 * 9 * 2", 4608), ("5 + 2 + (8 + 9 * 6 * 7 * 6) * 8", 34328), ("6 * (9 * 5) + (5 + 2 + 6 * 8) * 6 * 6 * (4 + 7 + 8 * 8)", 4891968), ("2 * 3 * 6 * 8", 288), ("3 + (4 + 5 * 8 * 8) * 2 * (9 * (5 * 3 + 8 + 6) * 2 + (5 * 7 * 3) * (4 + 5) + 7)", 1516609440), ("6 * (5 * 4) * 5 + 4 + (6 + 2) + 6", 2760), ("2 * (4 * (7 + 2 + 3 + 3 * 8) * (9 + 3 * 3) + (6 * 8 * 5 * 7) + (6 + 5) + 7) * (3 + 8 + (5 + 4 + 8 + 6) * 3 + 2 + 3) * 8 + (3 * 3) * 9", 69275658240), ("(5 + (4 * 8 * 7) + 7 * (7 * 9 + 2 + 5 + 6)) + 4", 36348), ("6 + ((3 + 9) * 4)", 54), ("9 + ((4 + 4 + 5 * 6) * 8) * 2", 1266), ("(4 + 2) * 3 * 3 + 3", 108), ("5 + 2 + (8 + 7 + 5)", 27), ("6 + (7 + 4 * 9 * (6 + 8 * 8 + 3) * 8)", 121974), ("3 + 3 * 6 * 3 + (4 * (2 + 6 * 7) * 8)", 64620), ("7 * 5 + 8 * 7 + (9 + 4 * (7 + 6 + 2 * 7 * 9) + 9 + 9 * 4) + (3 + 6 + 5 * 6 * 4 + 9)", 4656925), ("5 + (9 * (5 * 7 * 6 * 8) + (8 * 3) * 6 + (2 + 7 * 8)) * (9 + (5 + 7 * 2 * 6 + 9 + 7) + 4 + 8 * 3) * 7", 13791139677), ("(6 + 7 * 7 * 9 * 4) * 3 + (5 + 7) * 7 * 5 * 6", 10319400), ("(9 + 6 * 5 + 3) * (2 + 6 + 6) + 4 * 6 + 3", 19440), ("5 + 8 + ((9 + 8) * (3 * 3 + 8 * 8) * 2 + 3) * 6 * 4", 538872), ("((3 + 9 * 2 * 8 * 7) * 7 * 8 + 3 + 7) * (8 * 9) * 5", 60963840), ("5 + 3 + (4 * 4 * (8 * 8 + 4 * 4) + 4 + 5 * 6) * 4 + 2 + 7", 490568), ("5 + ((6 + 4 + 9 + 3) * 6 + (2 + 4 * 9 + 4 + 7 + 7)) + 4 + 9 * 8", 29712), ("2 + 4 * 7 * 5 * ((5 + 4 + 6) + 4 * 4)", 15960), ("8 * 6 + (4 + 8 * 5 * 6 + 4 * 9) * 9 + (2 + 8)", 821712), ("((8 + 3 * 2 * 6) * (7 + 8 * 8) * 9 + (2 + 5) + 4) * (2 * 9 * 5 + (9 * 4 * 2 + 7 + 8) * 2 + 2) * 6", 84441139200), ("4 * ((5 * 5 + 6 * 8 * 5 * 9) + 4 * (3 + 7 * 6 + 4) * 4) + 2 * ((9 + 8 + 9) + 9 * 2) * 8 + 4", 26616582720), ("2 * 8 * 6", 96), ("(7 + (7 + 8 * 9) * 7 + (5 * 8 * 6 * 9 + 6 * 4)) + ((5 + 9 * 6 + 7) + 8 + 7 + (8 * 7 * 4 + 5 + 2) * 5 + (9 + 3 + 9 * 2 * 6 * 3)) * (4 + 5 * 4) + (8 * (5 * 5) * 9 * (3 * 3) + 5) * 4", 268963975728), ("(6 + 5 + 5 * 5) * 4 + ((8 + 6 + 8) + 5 + 5 + 7 * 9)", 28400), ("9 * (9 * 2 + 4 * 2 * 4)", 3888), ("4 + (6 + 2) * (4 + 2 + 2 * 5) + 2", 504), ("5 * (6 + 8 + 5 * 2 * (7 * 2 + 2))", 5320), ("((7 + 5) * 2 * (3 * 5 * 9)) + 7 * (7 * 5 + 9 * 9 * (5 * 9))", 128873430), ("7 + 5 * (2 * 3 * 4 + 9 * 7 * 9) + (2 + 8 + (3 * 6) * 7 * 7 * (5 * 8 * 7 + 8 * 6 * 9)) * 5", 2667462840), ("9 * 3 * ((9 + 7) * 7 * (2 * 9 + 5 * 9 * 7 + 8) + 6 * 6 + 6) * (9 + 7 + 6 + 9 * 7)", 29812841856), ("8 + 9 * 4 * ((7 * 3 + 6 + 6 * 7 + 9) + 8 * 5 * 2)", 1147840), ("3 * (3 * (5 + 5 + 5 * 2))", 270), ("4 * 4 * 8 * 6 + (3 + (5 + 5 + 5 + 6 * 6) * 8 * 9 + 9) + 3", 2378880), ("(3 + 8) + 4", 15), ("6 + 5 + 3 + ((2 + 5 + 6) + (9 + 5 * 4 * 9) + 6 * 7 + 5)", 6290), ("(6 * 8 * (2 + 2 + 8 + 8 + 2) + 7 + 6 * 3) + ((7 * 3 * 9) + 2 * 4 * 4 + 2) + 5", 9629), ("6 * ((6 * 8 + 3 * 9) + 2 * 9) + 3 * (6 + (3 * 7 * 4) + 4 * (6 * 8 * 3 * 7 + 3 * 8) * 6 * 7) * 6", 8787467243520), ("5 * 8 * (7 * 7 + 4 * 7) + (2 * 4 + (3 * 2 * 4 * 9) + 4 + 2)", 39640), ("(3 * 8) + 3 + 6 + (3 * 3 + 9 * 6 * 8) + 3 + 5", 1769), ("((6 + 5 + 7 + 3) * 7 + 9 * 5) + 9 + 2", 1691), ("3 + 2 * ((9 + 9) * 8 + 5 * (6 + 4 * 6) + 4 + 7) + 9 + 4 * 4", 332540), ("5 * 6 + (5 + 6 * 8 * 5 * (8 * 2 + 7) * (7 * 6 * 2 * 2 * 7 * 6))", 1117670430), ("8 + 4 + 3 + (4 * 7) * 2 * (2 + (3 + 8 + 8 * 2 * 9))", 29584), ("7 + 5 + 3 + ((9 * 9 + 2 * 8 * 6 + 5) * 2) + (3 * 7 + 6 * 4 * (8 * 6 + 8 + 8 + 7 * 3) + (9 + 3 * 8 * 6 + 4)) * (9 * 6 * 9 * 6)", 804159900), ("5 + (2 + (6 * 3 * 3 + 9 * 8 * 8) + 3) + 9 * 6 + 6", 166116), ("6 + (2 + (3 * 5 + 2 + 4)) + 7 * 9 * (8 * 9 * 6)", 186624), ("((4 * 4) + 2 + 7 + (5 + 3 * 2 + 9 + 8 + 4) * 5) * (2 * (6 + 8 * 9 + 7) * 9 + (7 + 5 * 7) * 8) + 6 * 3 * 3", 3134855790), ("(7 * 5) * (5 + 3 + 5)", 455), ("(2 * 6 * 9 + 9 + 6) + 9 * 8", 2376), ("6 + (9 + 6 + 7 * 7 * 3 + (9 + 8 + 2 * 3 + 4 + 7)) + 9 * ((2 * 5 + 4 * 6 * 6 * 7) + (6 + 5 * 4 * 5 * 8) + 9) + ((5 + 7) * 5 * 4)", 271231345), ("(7 * 2 + 7 * 8 * (7 + 6)) * 2 * 2 * 2", 52416), ("(6 + 5 * 2 + 3 + 5) * 8 + 4 + 2", 1540), ("3 + 4 + 3 + 7 * ((2 * 8 * 8 * 3 + 4 + 4) * 8 * 2 * 9 + 4 + 9)", 8425472), ("7 + (5 * (7 * 9 + 7 + 2 * 7) + 9 + 3 + 5 + (8 * 9))", 4862), ("8 * (2 * (8 + 4 * 3) + 7 * 7 + 5 + 8) + 3 + 6 * 8", 110656), ("(8 + 3 * 5) * 6 + 2", 440), ("3 + 8 * ((3 * 8) + 8 + 5)", 407), ("5 * 9 * 5 + ((5 + 6 + 7) + 4) + ((5 + 8 + 3 + 4 + 3) * 8 * 3)", 26055), ("7 * (6 + 4 + (7 + 4 + 4 + 6) * 3 * 3 + 2) + 7 + 8 + 4 + 3", 3409), ("2 + ((3 + 8) + 2 + 9 + 4 * 3)", 80), ("4 + 9 * 3 + 9", 156), ("(7 + (7 * 4 + 7) * (6 * 6 * 9 * 4) * (2 + 5 + 8 + 3)) * 3", 5878656), ("(8 + 2 + 4 * 7 * 3) + 2 * ((6 + 2 + 2) + 7 * 8 * 8 * 5 * 8) + 7 + (5 + 8 + 2 * (9 * 9) + 3)", 13256952), ("8 * 2 + 6 * ((5 * 3) * 6 * 2 * (7 * 2 + 4 * 4 + 9)) + 4", 6290176), ("4 * 3 * (8 + 7 * (2 + 4 + 7 + 4 + 3)) * 9", 32400), ("7 + (6 + (6 + 2) + 8 + 9 + 3) * (3 + 9 * (3 + 5 + 6 + 7 + 6) + (8 * 8 * 7) + 5 + 8) * 9 * 2 * 8", 34573824), ("3 + 6 * (3 * 5) * (9 + 4 * 3) + (5 * 6 + 3) * 6", 68040), ("6 + (5 * 6 * 7 * (2 * 4) * 9) * 7 * 7 * 6 * ((2 * 6 * 2 + 3) + 7 + 9 * 2 + 6 * 6)", 16222816512), ("(4 * 4 * 2) * (4 + 3)", 224), ("7 * 8 * 9 * 6 * 2 + (8 * (8 + 6 + 6) + 3 + 5 + 2)", 731808), ("(9 + 2 + (8 * 9 * 5 + 7) + 3) * 9 * (7 + 8 + 3 * 4 + 5) + 8 * (5 * 5 + (4 + 5 + 5 * 3 + 8) * 4) + (7 + 3 + 7 + 4)", 4300031340), ("8 * (2 * 2 + (8 + 7 * 9 * 2) * (8 * 2 + 5 + 4) * 9 + 8) * 6 + 3 + (4 * 3) * 7", 957057024), ("(5 + 7 + 9 * 6 + 4) * 9", 1890), ("(3 + (5 + 3 + 4) * 3) + 3 + 8 * ((5 * 8 * 6) + (8 + 6 * 4 * 4 + 8) * 8 + 2 * 4 + 7) + (2 * (5 * 5 * 3) * 2 * 9)", 5769120), ("(8 + 2 * 8) + 9 * 8 + 7", 1335), ("4 * (2 * 3 + 8 + 3 * 5) * ((3 * 3 * 8 + 7) * (7 + 5 + 8) * 6) + (9 * 5) + 8", 9101680), ("7 * (6 * 3) + (7 + 8 + (2 + 5) * 3) + 7 + 6", 679), ("5 + 9 * 2", 28), ("9 * 2 + 8 * (3 * (6 * 7 * 7) * 8) + 9", 635850), ("((2 + 8 + 7 + 6) + 4 * (6 * 5 + 7 * 4 + 5) * 8) * 9 + (7 + 2 * 5 * 5 * 3 * 3) + 3", 285114816), ("6 + 3 * 3 + (8 + 4)", 135), ("(8 + (8 * 2) + 4) * 5 * 4 + 5", 1260), ("(5 * 5 * 5 * 8 + 8 + 7) + (6 + 9) + 4 * 3 + 4", 20258), ("(3 + (2 * 9 + 2 + 9 + 4) + 2 + (5 + 3 + 2)) * 5 * 3 + 5", 2520), ("6 + 3 * ((8 + 7 * 8 * 7 + 9) + 3 + 3 + 9 * (7 + 5 + 9) * 9) + 5 + (7 * 8 + (5 * 7 + 5 * 9 + 4))", 3341124), ("(4 * 9) + 7 * 9", 387), ("(3 + 7) + 2 + (5 * 2 * 4 * 6 + 5)", 452), ("5 * 4 * 2 * ((9 * 4 * 7) * 2 * 3) + 3 + 6", 60840), ("(5 + 2 * 7 * 7) * (4 * (3 * 8 * 2) * 3 * (2 + 3 * 8)) + 4 * 6 + 8 + 7", 165985932), ("7 * 4 + 2 + (6 + 2 * 5 * 2 + 6 * 9) + 7 * 2", 40502), ("8 + (4 * 4 * 7 * 9 + 5 + 6)", 2248), ("(4 + 7 + 8 * 6) + (3 * 5 + 4) + 4", 145), ("6 + 2 + 3 + 2 * 3 + 9", 156), ("6 + ((7 * 6 + 5) + 4 + 9 + (5 + 6 * 6 + 5 * 2 * 9) * (2 * 9)) + 9 + 5 * 2", 81688), ("8 + 3 * 4 * 3 * (3 * 9 * 2)", 7128), ("9 * (7 * 7 * 4) + 3 + (9 + (6 + 6 + 2 + 3 + 5 + 6) * (3 * 7 * 9 * 3) * 6 + 8 * 3)", 7931853), ("5 * (9 * 2 + (6 + 2 * 5) + 5)", 2115), ("4 + 3 + 9 + 7 + 5 + (3 * (2 + 8 * 6) * 4 + 2)", 1108), ("3 * ((2 + 5 + 2 + 6) + 3 + 4 + (7 + 9) * (7 + 8 * 4 + 9) * 3) + 9 + (8 + 6)", 66759), ("8 + 4 * 4 + 7 + ((3 * 9 * 2 + 2 * 8) + (3 + 6 + 2 * 5 * 4 * 8) * 8 * 8)", 2015364), ("4 + 4 * ((5 + 3 + 2 * 4 + 7 * 8) * (5 * 6 + 9) + 5 * 3)", 1689600), ("7 * 8", 56), ("3 + (5 * 3 + (5 * 9) * 2 + 4) + 2 + 3", 1448), ("6 + 8 + 3 + (2 * (6 + 5 + 3 * 8 + 9) * 3 * 9) * (6 * 8)", 617712), ("2 * 9 * 4 * (6 * 2 * 6 * 3 * 8) * 4", 497664), ("6 + (3 * 4 * 7 + 5 * 5 + 2) * 4 + (6 * 5 * (6 + 2 + 9 + 6 * 8) * 2 + 5) + 4", 39189072), ("6 * ((6 + 4) + 9 * 5 * 3 + (9 * 5)) * (4 + 2 * 7 * (4 * 9 * 3 * 8) * 4) + 3", 3971440800), ("7 * 2 + 6 * (3 * 6 + 6 * 5) * 7 * 7", 493920), ("3 + 8 * (3 * 2 + (9 * 3 + 8 * 7 + 8 + 4) + 6 + 3 + 5) + (6 + 8 + 7 * 3) * 9 * (4 * 3 * 6 + (9 + 9 * 9 * 2 * 6) + 4 + (6 * 4 + 5 + 9 + 9 + 7))", 14751552816), ("4 * 8 * (8 * 5 + 3 * 6 * 7 + 9) * 9", 1769472), ("8 + 4 * 9 * 4 * 8", 3456), ("(3 * 7 + (5 * 2 + 7 + 5 * 6) + 9 * 5) * 6 + 6 + 2 * 5", 457800), ("(8 + (4 * 8 * 8) * 7) + 4 * 8 * ((4 * 4 * 5) + 8 + 8 + 2) + ((6 * 8) * 8 * 8 * 8 * 2) + 8", 729806528), ("4 * (6 + 2 + 6 + 9 + 7) * 4 + 7 + 9", 2400), ("5 + (2 + 6 * 8 + 5) + (6 + (8 + 9 + 5) * 4 * 3) * 4 * 5", 8900), ("9 * 6 + 5 * (4 + 2 + (7 + 9 * 6)) + 5 + 6", 11187), ("8 + ((8 + 3 + 5 + 3 * 8) + 5 + 3) * 4 * 3", 2016), ("2 + (3 + 5 * (8 * 2) + 8 + 5) * 8 + 4 + (8 + (9 + 8) + 8 * 9 * 7) + 9", 491400), ("7 * (4 * 2 + 5) * 8", 1568), ("3 + 5 + 7 + (6 + 2 * 7 * 7 * 5) + ((3 * 4 + 8 * 5 + 6) + 4 * 5)", 3975), ("(9 + 6) * 7 * (9 + 3 + 4 * (8 + 8 * 3 + 6 + 8 * 2))", 913920), ("2 + (6 + 5 + (7 * 5 + 5 + 9 + 7 + 6) + 2 + 2 * (8 + 8))", 3826), ("4 * 9 + 2 * 9 + 9 + 8", 1144), ("((2 * 7 * 5) * 8) * 8 + 4 + 8 * 4", 44800), ("7 * 5 + (8 + 9) * 3 * 6", 2772), ("8 + ((9 + 7 + 8) + (8 * 5) + 2 + 7 + 3 + 3) + 3", 90), ("6 * (5 * (7 + 6 + 5 * 9 + 8 * 5) * 6) + 7 * 9 * ((2 + 5 * 8 * 2 + 3) * 3 + 7 + 5 * 3) * 2", 62470245600), ("3 * (3 + 5 + 4) * 6 * 9", 1944), ("6 + ((8 * 5 + 3 + 9) * (5 + 2 * 4 * 5 + 5) + (2 * 3) + 4 + 7) + 7 + 8 * 6 + 4", 404130), ("((9 * 2 + 8 * 9) * 4 + 5 * 3 * (8 * 2 * 7)) + (7 + 4 * 2 + 6) * 9", 22045752), ("(6 * 5 + 7 * (5 * 5 + 4 + 7 * 7 + 6) + 2) * ((4 + 6 * 5 * 6 + 7) + 9 + 5) * 7 * (4 + 7 * 6 + 5) * 5", 210970488960), ("8 * (3 * 6 + 5) + 9 * (9 + 6 * (4 * 6) + (7 + 8 + 5 + 3)) * (3 * 7 * 8 * 2) + 9", 81723600), ("8 * 3 + (5 + 3) + 8 * 4 + (4 + (7 + 9 * 5 * 3) * 6 + (7 + 5 + 4) + 8 * 8)", 8901728), ("2 * 3 + ((8 * 8 * 8 + 4) * 7 * 7) * 5 * 8", 3010800), ("(6 * (7 + 3 + 8 * 5 + 2) + 2 * 4 + 5 * 5) * 2 * (8 + 3 + 3 + (6 + 4) * (9 * 3)) + 6 * 9", 406840320), ("8 * (7 * 6 * 8 * (3 * 6 + 4 + 6 + 2 + 2) * 6) + 8 * 8 * 6", 46451712), ("(7 * 5 * 5) * 7 * ((3 + 6 + 3 + 4 + 2 * 2) * 8 * (7 + 9 * 9 * 9))", 457228800), ("((5 + 7 * 9 * 2 + 7) + 7 + 5 * 6 + 3) * 6 * 2 * 3", 318816), ("5 + (5 * (9 + 9) + (7 * 7 * 4 + 2) * 3)", 4685), ("((8 * 8 + 2 + 8 * 9) * 5) + (2 + (9 * 6 + 9 + 7) * 7)", 7880), ("3 + ((7 * 4 * 4 * 5) * (8 + 3 * 4 + 4 * 9) * 5 * 3 + 7) + 4 * 2 * 7 * (3 * 6 * 6)", 33530122584), ("((9 * 7 + 6 + 7 * 9 + 2) * 4 + 3 + 4 + 4 * 6) * 8 + (4 + (8 + 2 * 6 * 4 * 3)) + (5 + 2 * 6 * (4 * 5 + 4 + 2)) + 4 * (6 + 3 * (2 * 2 * 6 * 3) + 8 + 4 * 5)", 1740572064000), ("(5 * (7 + 9 + 5) + 6) * 5 * (6 + 7 * 9 + 6) * 9 * 5 + 9", 16584750), ("(4 * 4 * 6 * (5 * 8 + 3 + 8) + 5) + (9 * (3 * 9 + 3 * 9) + 5 + 8 + 2 * 3) * 3 * 2 + 8 * 5", 2812950), ("7 + 5 * (3 + 8 + 6 * 9 + 5 * 8) * ((9 * 9 * 4 * 9 + 3) * (6 + 9 * 5) * 8 + 4 + 6)", 119924582400), ("7 + 8 * ((3 + 7 * 5) + 3 * 2 + 2 * 3 + 7) * 9 + 8 * 7", 3784200), ("3 + 4 + (5 * (9 + 9 + 3 * 6 * 4 * 3) * 4) * (4 * (7 * 6 * 3 + 5 * 2 * 9) + (7 * 3 + 5))", 738510752), ("3 * (2 + 8 + 2) * 6 * (4 * 4)", 3456), ("2 + 2 + 3 * 5 + (3 + (6 + 2) + 9 + 7) * (3 * 3 + 5 + 8 + 7)", 15456), ("4 + 5 + 6 * 6 * 6 + (3 * 2 * 3 * (2 * 6 + 9) + 6 + (5 + 2 + 9 * 6))", 214380), ("((4 + 9) + 2) * 7 + 3 * 4", 600), ("2 + 6 * ((2 * 7 * 8 * 3 + 8 + 4) + 9 + 6 + 9 * 2 + 9) + 7 * 6", 900048), ("9 * 7 + ((2 + 5 * 2 * 7 * 8) + 6 * 2 + 3 + 4) * 5 * (5 + 2 * 7) * 8", 125543880), ("4 * (8 + 5 * 6 * 8) + 2 + 3 * 7", 17612), ("(2 * 2) * 9 * 6 * 3 + 9", 2592), ("9 + 2 * (7 + 5 + 7 + (3 + 7 * 2 * 2 + 3) * 3)", 3927), ("(2 + 5 * 9) * (4 * (9 + 2 * 4 + 3 + 2) * 2 + 8 + (6 * 7 + 9 + 5)) * 3 + 8", 37322208), ("(6 * (6 + 7 * 7) + 7 * 6 * 7) + ((7 * 6 * 4) * 6 * (8 + 8 + 5 * 7 * 8 + 8) + (4 + 5 * 5 + 5 + 3 * 9) + 8)", 3465000), ("9 * (6 * 9 * (8 * 2 * 6) + 4 * 4)", 194400), ("(5 + 5 * 5 + 8) * 6 + 5 * 2", 2860), ("4 + ((8 + 7) + 5) + 6", 30), ("9 + 6 * (7 + 4 + (9 + 4 + 2 + 8)) + (8 * 5)", 1110), ("(3 * 8 + (6 + 9 * 8 + 6)) + 3 + 4 * 8 + 5 * 3", 25779), ("3 + 6 * (7 * 8 * 6 * (5 + 8 + 6) + 5 * 4) * ((8 + 9 + 6 * 8) * 9 + 6 * 6 + 2 * 2) * 4", 51279298560), ("7 * (6 * (5 * 5 + 9 * 7 + 5 + 9) + 8 + 9 + 2 * (6 * 7 * 7)) * 3", 55158516), ("4 + 2 * (5 * (3 * 8 * 3) * (5 + 9 + 8 * 9) + 9 + 7) * 7 + 5", 5546880), ("6 * 5 * (5 * 3 * 9 * 4 * 2) * 9 + 7 * 4", 2073600), ("3 * (4 * (7 + 2) + 4 + 6 + (3 + 6 + 6 * 5)) + 5", 1143), ("7 * 7 * (5 + 9 + 9) * (8 * 6 * 5 + 4 * 2)", 973728), ("6 + (9 * 4) * ((4 * 2 * 4 * 4 * 6 * 7) + 9 + (2 * 9 + 9 + 9)) + 2 + 4 + 4", 228858), ("9 * (6 * 5 + 9 * 2 * 4) + 7 + 8 * 8 + 9", 105111), ("(6 + 7 + 8 * 2 * 4) * 5 + 2 + 2 * 5 + 6", 16632), ("8 * 7 * (9 * 2 * 4 + 3 + 4 * 4) + (8 * 8 + 9 + 6) + ((7 * 7 + 2 * 9) * (2 * 8 + 2) * 6 * 6) + 8", 22916544), ]; // Find shortest failures first, that should make it easier to understand. ts.sort_by(|l, r| l.0.len().cmp(&r.0.len())); for (input, want) in ts { let got = parse_part2(&lex(input)); assert_eq!(got, want, "got {}, want {} for {}", got, want, input); } } }