Mike has a sequence A = [a1, a2, ..., an] of length n. He considers the sequence B = [b1, b2, ..., bn] beautiful if the gcd of all its elements is bigger than 1, i.e. <image>. 

Mike wants to change his sequence in order to make it beautiful. In one move he can choose an index i (1 ≤ i < n), delete numbers ai, ai + 1 and put numbers ai - ai + 1, ai + ai + 1 in their place instead, in this order. He wants perform as few operations as possible. Find the minimal number of operations to make sequence A beautiful if it's possible, or tell him that it is impossible to do so.

<image> is the biggest non-negative number d such that d divides bi for every i (1 ≤ i ≤ n).

Input

The first line contains a single integer n (2 ≤ n ≤ 100 000) — length of sequence A.

The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 109) — elements of sequence A.

Output

Output on the first line "YES" (without quotes) if it is possible to make sequence A beautiful by performing operations described above, and "NO" (without quotes) otherwise.

If the answer was "YES", output the minimal number of moves needed to make sequence A beautiful.

Examples

Input

2
1 1


Output

YES
1


Input

3
6 2 4


Output

YES
0


Input

2
1 3


Output

YES
1

Note

In the first example you can simply make one move to obtain sequence [0, 2] with <image>.

In the second example the gcd of the sequence is already greater than 1. 
  //   package com.company;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.lang.reflect.Array;
    import java.sql.SQLOutput;
    import java.util.*;
    public class Main {

        public static void main(String[] args) throws IOException {
            Scanner s = new Scanner(System.in);
            //BufferedReader s=new BufferedReader(new InputStreamReader(System.in));
             StringBuilder sb1 = new StringBuilder();//int n=Integer.parseInt(s.readLine());
              int n=s.nextInt();
              long[]a  =new long[n];long ans=0;long gcd=0;
              for(int i=0;i<n;i++){
                  a[i]=s.nextLong();
                  if(i==0) gcd=a[i];
                  else{
                      gcd=gcd(a[i],gcd);
                  }
              }
     //       System.out.println(gcd);
              if(gcd>1){
                  System.out.println("YES\n0");System.exit(0);
              }
              for(int i=0;i<n-1;i++){
                  //System.out.println("HUI");
                  if(a[i]%2==0&&a[i+1]%2!=0){
                      if(i+2<n&&a[i+2]%2!=0) {

                        
                      }
                  else{
                          a[i+1]=2;ans+=2;
                      }
                  }else if(a[i]%2!=0&&a[i+1]%2==0){
                          ans+=2;a[i+1]=2;
                      }
                      else if(a[i]%2!=0&&a[i+1]%2!=0){
                          if((a[i+1]-a[i])%2!=0) {
    ans+=2;a[i+1]=2;
                          }else{
    ans+=1;a[i+1]=2;
                          }
                      }

              }
            System.out.println("YES");
            System.out.println(ans);

        }static long ans=0;static long count=0;
        static void dfs(int i,ArrayList<Integer>[] adj,int[] vis,int n){
            vis[i]=1;
            if(adj[i]==null){return;}
            for(Integer j:adj[i]){
                if(vis[j]==0){
                     dfs(j,adj,vis,n);
                }
            }}
        static  void computeLPSArray(String pat, int M, int lps[])
        {
            int len = 0;
            int i = 1;
            lps[0] = 0;
            while (i < M) {
                if (pat.charAt(i) == pat.charAt(len)) {
                    len++;
                    lps[i] = len;
                    i++;
                }
                else // (pat[i] != pat[len])
                {
                    if (len != 0) {
                        len = lps[len - 1];
                    }
                    else // if (len == 0)
                    {
                        lps[i] = len;
                        i++;
                    }
                }
            }
        }
        static boolean isPrime(int n)
        {
            if (n <= 1) return false;
            if (n <= 3) return true;

            if (n % 2 == 0 || n % 3 == 0) return false;

            for (int i = 5; i * i <= n; i = i + 6)
                if (n % i == 0 || n % (i + 2) == 0)
                    return false;

            return true;
        }

        static double power(double x, long y, int p) {
            double res = 1;
            x = x % p;
            while (y > 0) {
                if ((y & 1) == 1)
                    res = (res * x) % p;
                y = y >> 1;
                x = (x * x) % p;
            }
            return res;
        }
        public static void fracion(double x) {
            String a = "" + x;
            String spilts[] = a.split("\\."); // split using decimal
            int b = spilts[1].length(); // find the decimal length
            int denominator = (int) Math.pow(10, b); // calculate the denominator
            int numerator = (int) (x * denominator); // calculate the nerumrator Ex
            // 1.2*10 = 12
            int gcd = (int)gcd((long)numerator, denominator); // Find the greatest common
            // divisor bw them
            String fraction = "" + numerator / gcd + "/" + denominator / gcd;
            // System.out.println((denominator/gcd));
            long x1=modInverse(denominator / gcd,998244353  );
            //  System.out.println(x1);
            System.out.println((((numerator / gcd )%998244353 *(x1%998244353  ))%998244353  ) );
        }static int anst=Integer.MAX_VALUE;
      static StringBuilder sb1=new StringBuilder();
        public static int bfs(int i1, ArrayList<Integer>[] h, int[] vis, int n,int val1) {
            Queue<Integer> q = new LinkedList<Integer>();
            q.add(i1);Queue<Integer> aq=new LinkedList<Integer>();
            aq.add(0);
            while(!q.isEmpty()){
                int i=q.poll();
                int val=aq.poll();
                if(i==n){
                    return val;
                }
                if(h[i]!=null){
                    for(Integer j:h[i]){
                       if(vis[j]==0){
                        q.add(j);vis[j]=1;
                           aq.add(val+1);}
                    }
                }
            }return -1;
        }
        static int i(String a) {
            return Integer.parseInt(a);
        }
        static long l(String a) {
            return Long.parseLong(a);
        }
        static String[] inp() throws IOException {
            BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
            return s.readLine().trim().split("\\s+");
        }


        static long gcd(long a, long b) {
            if (b == 0)
                return a;
            return gcd(b, a % b);
        }
        static long modInverse(int a, int m)
        {


            {
                // If a and m are relatively prime, then modulo inverse
                // is a^(m-2) mode m
                return (power(a, m - 2, m));
            }
        }

        // To compute x^y under modulo m
        static long power(int x, int y, int m)
        {
            if (y == 0)
                return 1;

            long p = power(x, y / 2, m) % m;
            p = (p * p) % m;

            if (y % 2 == 0)
                return p;
            else
                return (x * p) % m;
        }

        // Function to return gcd of a and b

    }
    class Student
    {
        int l;int r;
        public Student(int l, int r) {
            this.l = l;
            this.r = r;
        }
        // Constructor


        // Used to print student details in main()
        public String toString()
        {
            return this.l+" ";
        }
    }

    class Sortbyroll implements Comparator<Student>
    {
        // Used for sorting in ascending order of
        // roll number
        public int compare(Student a, Student b){
            return a.l-b.l;  }
    } class Sortbyroll1 implements Comparator<Student>
    {
        // Used for sorting in ascending order of
        // roll number
        public int compare(Student a, Student b){
            return a.l-b.l;
        }
    }