#include<bits/stdc++.h>
#define rep(i,n) for(int i=1;i<=n;++i)
#define N 10005
using namespace std;
typedef long long ll;
struct ver{
int x,y;
ver operator+(ver p){return(ver){x+p.x,y+p.y};}
}v[160005];
ll dis(ver p){return 1ll*p.x*p.x+1ll*p.y*p.y;}
bool cmp(ver x,ver y){return dis(x)<dis(y);}
bool inr(int p){if(v[p].y==0)return v[p].x>0;return v[p].y>0;}
bool cmp_r(int x,int y){
if(inr(x)==inr(y))return v[x].x*v[y].y-v[x].y*v[y].x>0;
return inr(x)>inr(y);
}
int ans[10005],top,n,tot,now,tp;ver res,re;bool q;ll ts;
int main(){
//freopen("emperor.in","r",stdin);
//freopen("emperor.out","w",stdout);
for(int i=-199;i<=199;++i)
for(int j=-199;j<=199;++j)
if(i||j)v[++tot]=(ver){i,j};
sort(v+1,v+tot+1,cmp);
scanf("%d",&n);
for(tp=1;tp<=tot;++tp){
if(dis(v[tp])!=dis(v[tp-1]))++now,ts+=dis(v[tp]);
if(now>n)break;
}
ts-=dis(v[tp]);--tp;
if(ts&1){
++tp;ts+=dis(v[tp]);
for(;dis(v[tp+1])==dis(v[tp]);++tp);
q=1;
}
for(;tp;){
if(q&&!((dis(v[tp])^ts)&1)){for(;dis(v[tp-1])==dis(v[tp]);--tp);--tp;q=0;continue;}
++top;re=(ver){1000000,1000000};
do{
if(dis(re)>dis(res+v[tp]))re=res+v[tp],ans[top]=tp;
--tp;
}while(dis(v[tp])==dis(v[tp+1]));
res=re;
}
sort(ans+1,ans+top+1,cmp_r);re=(ver){0,0};
puts("YES");
rep(i,top){
printf("%d %d\n",re.x,re.y);
re=re+v[ans[i]];
}
return 0;
}