fn main() { let stdin = std::io::read_to_string(std::io::stdin().lock()).unwrap(); let mut stdin = stdin.split_ascii_whitespace(); let n: usize = stdin.next().unwrap().parse().unwrap(); let a: Vec = (0..n) .map(|_| stdin.next().unwrap().parse().unwrap()) .collect(); use std::io::Write; std::io::stdout() .lock() .write_all(output(solve(a)).as_bytes()) .unwrap(); } fn solve(a: Vec) -> u16 { let mut ans = 1; let mut is_reachable = [false; 1 << 15]; let mut stk = Vec::with_capacity(1_000_000); is_reachable[0] = true; stk.push(0); while let Some(cur) = stk.pop() { a.iter().for_each(|&a| { if !is_reachable[(cur ^ a) as usize] { is_reachable[(cur ^ a) as usize] = true; ans += 1; stk.push(cur ^ a); } }); } ans } fn output(ans: u16) -> String { ans.to_string() + "\n" }