#include using namespace std; long long int all[100005],res[100005],indeks[100005],xkord[100005],ykord[100005],solve[100005],maxk,n,r,precnik,x,y,k,minrazmak,pomocna,VazneTacke[100005],br=1; clock_t pocetak, thisismyend,kraj; struct slog{int index; int brPojavljivanja; }; slog xy[100005]; bool maxbr(slog a , slog b){ return a.brPojavljivanja>b.brPojavljivanja; } bool ykordvv(int x, int y){ if(ykord[x]==ykord[y]){ return xkord[x]>xkord[y]; } return ykord[x]>ykord[y]; } bool rastojanje00(int x, int y){ return xkord[x]*xkord[x]+ykord[x]*ykord[x]< xkord[y]*xkord[y]+ykord[y]*ykord[y]; } bool rastojanjekraj(int x, int y){ return xkord[x]*xkord[x]+ykord[x]*ykord[x]>xkord[y]*xkord[y]+ykord[y]*ykord[y]; } bool rastojanjerandom(int x, int y){ return xkord[x]*ykord[x]+ykord[x]*xkord[x]< ykord[y]*xkord[y]+xkord[y]*ykord[y]; } void ulaz(){ scanf("%lld %lld",&n,&r); minrazmak=4*r*r; for(int i=1;i<=n;i++){ scanf("%lld %lld",&x,&y); xkord[i]=x;ykord[i]=y;indeks[i]=i; xy[i].index=i; } } bool SekuSe(long long int p){ for(int j=1;j<=k;j++){ long long int distanca=(xkord[p]-xkord[res[j]])*(xkord[p]-xkord[res[j]])+(ykord[p]-ykord[res[j]])*(ykord[p]-ykord[res[j]]); if(distancamaxk){ maxk=k; for(int i=1;i<=maxk;i++){ solve[i]=res[i]; } } k=0; } void obrada2(){ indeks[0]=xy[br].index; br++; for(int i=0;i<=n;i++){ if(clock()>=kraj)break; if(i!=0 and indeks[i]!=indeks[0]){ if(SekuSe(indeks[i])){ if(clock()>=kraj)break; k++; res[k]=indeks[i]; if(clock()>=kraj)break; } } if(clock()>=kraj)break; } if(k>maxk){ maxk=k; for(int i=1;i<=maxk;i++){ solve[i]=res[i]; } } k=0; } void cmpmania(){ sort(indeks+1,indeks+1+n,ykordvv); obrada2(); sort(indeks+1,indeks+1+n,rastojanje00); obrada2(); sort(indeks+1,indeks+1+n,rastojanjekraj); obrada2(); sort(indeks+1,indeks+1+n,rastojanjerandom); obrada2(); } void izlaz(){ printf("%lld\n",maxk); for(int i=1;i<=maxk;i++){ printf("%lld ",solve[i]); } } int main(){ srand(1); thisismyend=clock()+2.5*CLOCKS_PER_SEC; kraj=clock()+4.5*CLOCKS_PER_SEC; freopen("mars.in", "r", stdin); freopen("mars.out", "w", stdout); ulaz(); while(clock()thisismyend){ sort(xy+1,xy+1+n,maxbr); for(int i=1;i<=n;i++){ VazneTacke[i]=xy[i].index; } while(clock()+0.2*CLOCKS_PER_SEC