int reflect(){ int i,j,k=-1; double L,af1,af2; double L1,L2,L3,D,pl,tL,L4; for (i=0;i<n;i++) if (dot(s,s+st,a[i])>eps){ L1=Dis(s,a[i]); L2=Dis(s+st,a[i]); L3=Dis(s,s+st); af1=acos((L1*L1+L3*L3-L2*L2)/2/L1/L3-eps); D=L1*sin(af1); if (D<r[i]-1e-8){ pl=L1*L1-D*D; if (k==-1 || pl<L){ k=i; L=pl; } } } if (k==-1) return 0; if (m==10) printf("etc.\n");else printf("%d ",k+1); L1=Dis(s,a[k]); L2=Dis(s+st,a[k]); L3=Dis(s,s+st); af1=acos((L1*L1+L3*L3-L2*L2)/2/L1/L3-eps); D=L1*sin(af1); pl=sqrt(L1*L1-D*D+eps); tL=sqrt(r[k]*r[k]-D*D+eps); pl-=tL; node ts,tst,v1,v2,v3; ts=s+mul(st,pl/L3); if (fabs(D)<eps){ s=ts; st=mul(st,-1); return 1; } // printf("%.5lf %.5lf %.5lf\n",ts.x,ts.y,ts.z); L4=L1*((L1*L1+r[k]*r[k]-pl*pl)/2/L1/r[k]); v1=ts-a[k]; v2=mul(v1,L4/r[k]); v3=a[k]+v2; v1=v3-s; v2=v1+v1; tst=(s+v2)-ts; s=ts; st=tst; //printf("%.5lf %.5lf %.5lf\n",st.x,st.y,st.z); return 1; }
main(){ int i,j,k,n,m,dim,hyper; while (scanf("%d %d",&n,&m)==2 && n+m){ hyper = 1; for (i = n,dim = 0;i > 1;i >>= 1,++dim) if (i>1 && i%2 != 0) hyper = 0; if (m*2 != n*dim) hyper = 0; for (i = 0;i < n;++i) deg[i] = 0; while (m--) { scanf("%d %d",&j,&k); if (Dis(j,k)!=1) hyper = 0; if (j < 0 || j >= n) hyper = 0; else ++deg[j]; if (k < 0 || k >= n) hyper = 0; else ++deg[k]; } for (i = 0;i < n;++i) if (deg[i] != dim) hyper = 0; puts(hyper?"YES":"NO"); } }