module Main; import CPLib.IO; // import BinaryHeap; // import BoolArray; // import CPLib.Arithmetic; // import CPLib.Bipartite; import CPLib.Bits; // import CPLib.Convolution; // import CPLib.DSegtree; // import CPLib.Graph; // import CPLib.LDSegtree; // import CPLib.LSegtree; // import CPLib.MaxFlow; // import CPLib.Memoize; // import CPLib.MinCostFlow; // import CPLib.Misc; // import CPLib.Monoid; // import CPLib.Segtree; // import CPLib.String; // import CPLib.Trait; // import CPLib.TwoSat; // import CPLib.UnionFind; // import CPLib.ZP; import HashMap; // import HashSet; cM : I64 = 150000; main : IO () = ( let iN = *read_i; let iAs = *read_is(iN); let cI = ( count_up(1).filter(|n| 1.shift_left(n) > cM * n ).get_first.as_some ); let cL = min(cI, iN); let mp = HashMap::empty(1.shift_left(cL)); let res = range(0, 1.shift_left(cL)).loop_iter_s(mp, |flag, mp| let sum = range(0, cL).filter(|bit| flag.bit_check(bit)).map(|i| iAs.@(i)).sum; match mp.find(sum) { none() => ( mp.insert(sum, flag).continue ), some(flag1) => ( (flag, flag1).break ) } ); match res { continue(_) => ( println("No") ), break((flag0, flag1)) => ( let xs = range(0, cL).map(|bit| if flag0.bit_check(bit) && flag1.bit_check(bit) { 0 }; if flag0.bit_check(bit) { 1 }; if flag1.bit_check(bit) { -1 }; 0 ).to_array; let ans = range(0, cL).map(|i| iAs.@(i) * xs.@(i)).to_array + fill(iN - cL, 0); println("Yes");; "{}".printfln((ans.to_iter.joined_with(" "),)) ), } );