#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using vi = vector<int>;
using vl = vector<ll>;

using _loop_int = int;
#define REP(i,n) for(_loop_int i=0; i<(_loop_int)(n); i++)
#define FOR(i,a,b) for(_loop_int i=(_loop_int)(a); i<(_loop_int)(b); i++)
#define FORR(i,a,b) for(_loop_int i=(_loop_int)(b)-1; i>=(_loop_int)(a); i--)

#define CHMIN(a,b) (a)=min((a),(b))
#define CHMAX(a,b) (a)=max((a),(b))
#define ALL(v) (v).begin(),(v).end()

#define DEBUG(x) cerr<<#x<<": "<<(x)<<endl
#define DEBUG_VEC(v) cerr<<#v<<": ";REP(__i,(v).size())cerr<<((v)[__i])<<", ";cerr<<endl

const ll MOD = 1000000007ll;

int n;

vector<pii> es;
void ae(int a, int b){
    es.push_back(pii(a,b));
}

vi g[252521];
int f(int x){
    return x>n ? x-n : x;
}
int dfs(int o, int p, int bef){
    if(p==o)return f(p);
    for(int to : g[p])if(to != bef){
        int v = dfs(o,to,p);
        if(v!=-1)return v^f(p);
    }
    return -1;
}
int main(){
    cin>>n;
    if(n<=2){
        puts("No");
        return 0;
    }
    // core
    ae(2,3); ae(3,1); ae(1,2+n); ae(2+n,3+n); ae(3+n,1+n);
    // ae(1,2); ae(2,3); ae(3,1+n); ae(1+n,2+n); ae(2+n,3+n);
    for(int i=4; i+1<=n; i+=2){
        // pairwise add
        ae(i,i+1); ae(i+1,1); ae(1,i+n); ae(i+n,i+1+n);
    }
    if(n%2==0){
        if(__builtin_popcount(n)==1){
            puts("No");
            return 0;
        }
        int lg = 0;
        while((1<<lg) < n)lg++;
        lg--;
        int a = (1<<lg);
        int b = n ^ a;
        assert(b!=0);
        ae(a+1,n); ae(b+n,n+n);
    }
    puts("Yes");

    for(pii P : es){
        printf("%d %d\n",P.first,P.second);
    }

    // // verify
    // for(pii P : es){
    //     int a = P.first; int b = P.second;
    //     g[a].push_back(b);
    //     g[b].push_back(a);
    // }
    // FOR(i,1,n){
    //     int v = dfs(i,i,-1);
    //     if(v!=i){
    //         DEBUG("ERROR");
    //         DEBUG(i);
    //         DEBUG(v);
    //         return 0;
    //     }
    // }
    // if(n%4==3){
    //     // sequence
    //     vi seq;
    //     REP(i,(n+1)/4){
    //         REP(j,4)if(i*4+j>0)seq.push_back(i*4+j);
    //         REP(j,4)if(i*4+j>0)seq.push_back(i*4+j);
    //     }
    //     puts("Yes");
    //     REP(i,2*n-1){
    //         printf("%d %d\n",seq[i]+1,seq[i+1]+1);
    //     }
    //     return 0;
    // }else if(n==1){
    //     puts("No");
    //     return 0;
    // }else if(n%2==1){
    //     // uni
    // }
    // if(n%4!=3){
    //     puts("No");
    //     return 0;
    // }else{
    //     //
    // }
    // const int N = 11;
    // vi v(2*N);
    // REP(i,2*N)v[i] = (i/2)+1;
    // // DEBUG_VEC(v);
    // do{
    //     bool ok = true;
    //     REP(i,N){
    //         int st = 0;
    //         int xx = 0;
    //         REP(j,2*N){
    //             if(st==1)xx^=v[j];
    //             if(v[j]==i+1)st++;
    //         }
    //         if(xx!=0)ok=false;
    //     }
    //     // DEBUG_VEC(v);
    //     if(ok){
    //         DEBUG_VEC(v);
    //         return 0;
    //     }
    // }while(next_permutation(ALL(v)));
    return 0;
}


Measured memory_bytes: 9968