#define put(now) if(now > 0 && now < N && floor(now) == now){list[(int)now] = (int)now; }
int search(double x[4],int N){
int *list = new int[N];
fill(list, list+N, 0);
int ans = 0, a=0;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++){
if(i == j) continue;
double now1 = calc(x[i],x[j],k);
for(int l=0;l<4;l++)
for(int m=0;m<4;m++)
for(int n=0;n<4;n++){
if(l==m || i==l || i==m || j==l || j==m) continue;
double now2 = calc(x[l],x[m],n);
double now3 = calc(now1,x[l],n);
double now4 = calc(x[l],now1,n);
for(int o=0;o<4;o++){
put(calc(now1, now2, o));
put(calc(now3, x[m], o));
put(calc(x[m], now3, o));
put(calc(now4, x[m], o));
put(calc(x[m], now4, o));
}
}
}
while(++ans<N)
if(list[ans] != ans)
break;
delete[] list;
return ans-1;
}
int main(){
uLLint N = 5*4*3*2*64+1;
int big = 0;
int X = 10;
for(double i=1;i<X;i++)
for(double j=i+1;j<X;j++)
for(double k=j+1;k<X;k++)
for(double l=k+1;l<X;l++){
double x[4] = {i,j,k,l};
int ans = search(x, N);
if(big < ans){
big = ans;
printf("[%.0f %.0f %.0f %.0f] %d\n",i,j,k,l, ans);
}
}
cout << big << endl;
return 0;
}