use proconio::input; use std::io::{stdout,Write,BufWriter}; use std::collections::{HashMap, HashSet, BTreeMap, BTreeSet}; fn main() { input!{ n:usize, e:[usize;n] } let out = stdout(); let mut out = BufWriter::new(out.lock()); let sum:usize = e.iter().sum(); if sum%3!=0 { write!(out, "No").unwrap(); return } let e_:BTreeMap = { let mut tmp:BTreeMap = BTreeMap::new(); for (i,&elem) in e.iter().enumerate() { tmp.insert(i,elem); } tmp }; let tmp:usize = 2_u32.pow(n as u32) as usize; let mut is_one_third:[bool;4096] = [false; 4096]; let mut bit_indices:BTreeSet = BTreeSet::new(); let mut sft_cnt = 0; let mut sum_ = 0; let mut i_:usize; // 12人のうち最大10人までを選び1/3を作れるか for i in 1..tmp { if i.count_ones() > 10{ is_one_third[i] = false; continue; } i_ = i.clone(); sft_cnt = 0; bit_indices.clear(); loop { if sft_cnt>=n { break; } if ((i_>>sft_cnt) & 0b1)==0b1 { bit_indices.insert(sft_cnt); } sft_cnt += 1; } sum_ = 0; for idx in bit_indices.iter() { // println!("{}", idx); sum_ += e_.get(&idx).unwrap(); // println!("{}", idx); } is_one_third[i] = sum_==sum/3; } for i in 1..tmp { for j in i..tmp { if i&j==0 && i&j