use std::collections::{VecDeque, HashSet}; fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let mut a = String::new(); std::io::stdin().read_line(&mut a).ok(); let a: HashSet = a.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let mut result: Vec = vec![false; 2usize.pow(15u32)]; let mut checked: VecDeque = VecDeque::new(); result[0] = true; checked.push_back(0); for v in a.iter() { let lim = checked.len(); for i in 0..lim { let val = v ^ checked[i]; if !result[val] { checked.push_back(val); result[val] = true; } } } println!("{}", checked.len()); }