#include #include #define N 250 using namespace std; struct lhy{ int x,y,f,next; }edge[800001]; int test[9]={2,3,5,7,11,13,17,19,23}; int son[N],now[N],back[N],dis[N],pre[N],sumd[N],a[N],id[N][2],belong[N*2],NNew[N],New[N],nowans[N]; int bo,Addi,Addj,Flow,tot,st,ed,ans[N][N],n,cnt,NN,h,l,v,Now,k,q[N],b[N],right[N],cnt1; int pow(int x,int m,int mo) { int nowans=1; while(m) { if(m&1)nowans=1ll*nowans*x%mo; x=1ll*x*x%mo; m>>=1ll; } return nowans; } bool Check(int a,int n,int mo) { int d=n-1; while(!(d&1))d>>=1; int t=pow(a,d,mo); while((d!=n-1)&&(t!=1)&&(t!=n-1)) { t=1ll*t*t%mo; d<<=1; } return (t==n-1)||((d&1)==1); } bool Miller_Rabin(int n) { if(n==2)return 1; if(((n&1)==0)||(n==1))return 0; for(int i=0;i<9;i++) { if(n==test[i])return 1; if(!Check(test[i],n,n))return 0; } return 1; } inline void add(int x,int y,int f) { edge[++tot].x=x;edge[tot].y=y;edge[tot].f=f;edge[tot].next=son[x];son[x]=tot; edge[++tot].x=y;edge[tot].y=x;edge[tot].f=0;edge[tot].next=son[y];son[y]=tot; } void SAP() { memset(dis,0,sizeof(dis)); memset(back,0,sizeof(back)); memset(pre,0,sizeof(pre)); int i=st,j,t,tmp,flag,flow=0x3f3f3f3f,minn; while(dis[st]0&&dis[j]+1==dis[i]) { flag=1; now[i]=t; pre[j]=t; if(edge[t].f0&&dis[edge[t].y]=3&&!NNew[0]) { ans[++k][0]=New[0]; for(int i=1;i<=New[0];i++) ans[k][i]=New[i]; } else if(NNew[0]) { ans[++k][0]=New[0]+NNew[0]; for(int i=1;i<=New[0];i++) ans[k][i]=New[i]; for(int i=1;i<=NNew[0];i++) ans[k][New[0]+i]=NNew[i]; } else { for(int i=1;i<=k;i++) { int bo=0; for(int j=1;j<=ans[i][0];j++) if(a[ans[i][j]]==1) { ans[i][0]+=New[0]; Addi=i; Addj=j; bo=1; break; } if(bo)break; } } if(New[0]<3&&!Addi&&New[0]&&!NNew[0]) { puts("NO"); continue; } if(!k) { puts("NO"); continue; } int nowCnt=0; for(int i=1;i<=k;i++) { nowCnt+=ans[i][0]; nowans[0]=0; for(int j=1;j<=ans[i][0];j++) { if(Addi==i&&Addj==j) { while(New[0]) { nowans[++nowans[0]]=1; New[0]--; } } if(ans[i][j]==0)break; if(j)nowans[++nowans[0]]=a[ans[i][j]]; } if(nowans[0]<3) { puts("NO"); goto la; } for(int j=1;j