import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.NoSuchElementException; class Main { public static void main(String[] args) { new Main().run(); } int MAX=(int)1e5+1; boolean[] isPrime=new boolean[MAX]; ArrayList primes=new ArrayList<>(); ArrayList>[] pe=new ArrayList[MAX]; { for (int i=0;i(); Arrays.fill(isPrime, true); isPrime[0]=isPrime[1]=false; for (int i=2;ii) isPrime[j]=false; int e=0; int v=j; while (v%i==0) { v/=i; ++e; } pe[j].add(List.of(i, e)); } } } int grundy(int n) { HashMap> decode=new HashMap<>(); for (var pair : pe[n]) { int p=pair.get(0); int e=pair.get(1); if (p != 2) { if (e >= 2) decode.computeIfAbsent(p, key -> new ArrayList<>()).add(e-1); for (var pair2 : pe[p-1]) { int p2=pair2.get(0); int e2=pair2.get(1); decode.computeIfAbsent(p2, key -> new ArrayList<>()).add(e2); } } else { if (e == 2) { decode.computeIfAbsent(p, key -> new ArrayList<>()).add(1); } else if (e >= 3){ decode.computeIfAbsent(p, key -> new ArrayList<>()).add(e-2); decode.computeIfAbsent(p, key -> new ArrayList<>()).add(1); } } } int g=0; for (var entryset : decode.entrySet()) { int[] key=new int[bits]; for (int i=0;i grundy=new HashMap<>(); int bits=16; { dfs1(new int[bits], bits, bits-1); } void dfs1(int[] a, int res, int pos) { if (pos >= 0) { int upper = pos+1 != a.length ? Math.min(res, a[pos+1]) : res; for (int nxt=0; nxt <= upper;++nxt) { a[pos]=nxt; dfs1(a, res-nxt, pos-1); } } else { int[] b=new int[a.length]; boolean[] vis=new boolean[17]; dfs2(a, b, vis, 0, false); int g=0; while (vis[g]) ++g; grundy.put(hash(a), g); } } void dfs2(int[] a, int[] b, boolean[] vis, int pos, boolean less) { if (pos < a.length) { for (int i= pos == 0 ? 0 : a[pos-1];i<=a[pos];++i) { b[pos]=i; dfs2(a, b, vis, pos+1, less | i < a[pos]); } } else { long key=hash(b); if (!less && grundy.containsKey(key)) throw new AssertionError();//ハッシュが衝突 if (less) vis[grundy.get(key)]=true; } } void run() { solve(); } void solve() { FastScanner sc=new FastScanner(); int N=sc.nextInt(); int[] A=new int[N]; int g=0; for (int i=0;i