fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut boxes = (0..n).map(|_| { let mut temp = String::new(); std::io::stdin().read_line(&mut temp).ok(); let mut temp: Vec = temp.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); temp.sort(); temp.reverse(); (temp[0], temp[1], temp[2]) }) .collect::>(); boxes.sort(); let mut cnts = vec![0usize; n]; cnts[0] = 1; for i in 1..n { let (x, y, z) = boxes[i]; let mut maxval = 0usize; for j in 0..i { let (px, py, pz) = boxes[j]; if px < x && py < y && pz < z { maxval = maxval.max(cnts[j]); } } cnts[i] = maxval + 1; } println!("{}", cnts.iter().max().unwrap()); }