#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int compare( const void* a, const void* b ) {
int* aa = (int*) a;
int* bb = (int*) b;
if( *aa < *bb ) return -1;
else if( *aa == *bb ) return 0;
else return 1;
}
int main()
{
FILE *in,*out;
int d[100000],a,b,c,k,delta,x,nr,i,p1,q2,p2,q1,aux1,aux2;
in=fopen("ecuatie.in","r");
out=fopen("ecuatie.out","w");
fscanf(in,"%d%d%d%d",&a,&b,&c,&k);
delta=b*b-4*a*c;
if (delta<0||floor(sqrt(delta))*floor(sqrt(delta))!=delta)
{
fprintf(out,"-1\n");
fclose(in);
fclose(out);
return 0;
}
nr=1;
d[0]=-a-1;
d[1]=a;
for (i=1;i<=a/2;i++)
if (a%i==0)
{
nr++;
d[nr]=i;
}
x=nr;
for (i=1;i<=x;i++)
{
nr++;
d[nr]=-d[i];
}
qsort(d,nr+1,sizeof(d[1]),compare);
if (delta==0)
{
if (k>nr)
{
fprintf(out,"-1\n");
fclose(in);
fclose(out);
return 0;
}
p1=d[k];
p2=a/d[k];
q2=(b)/(2*p1);
q1=c/q2;
if (p1==1)
fprintf(out,"(x");
else
if (p1==-1)
fprintf(out,"(-x");
else
fprintf(out,"(%dx",p1);
if (q1<0)
fprintf(out,"%d)",q1);
else
fprintf(out,"+%d)",q1);
if (p2==1)
fprintf(out,"(x");
else
if (p2==-1)
fprintf(out,"(-x");
else
fprintf(out,"(%dx",p2);
if (q2<0)
fprintf(out,"%d)",q2);
else
fprintf(out,"+%d)",q2);
fclose(in);
fclose(out);
return 0;
}
else
{
if (k>nr*2)
{
fprintf(out,"-1\n");
fclose(in);
fclose(out);
return 0;
}
p1=d[k/2+k%2];
p2=a/p1;
aux1=(b+int(sqrt(delta)))/(2*p1);
aux2=(b-int(sqrt(delta)))/(2*p1);
if (k%2)
{
q1=c/aux1;
q2=aux1;
if (c/aux2<q1)
{
q1=c/aux2;
q2=aux2;
}
}
else
{
q2=aux1;
q1=c/aux1;
if (q1<c/aux2)
{
q1=c/aux2;
q2=aux2;
}
}
if (p1==1)
fprintf(out,"(x");
else
if (p1==-1)
fprintf(out,"(-x");
else
fprintf(out,"(%dx",p1);
if (q1<0)
fprintf(out,"%d)",q1);
else
fprintf(out,"+%d)",q1);
if (p2==1)
fprintf(out,"(x");
else
if (p2==-1)
fprintf(out,"(-x");
else
fprintf(out,"(%dx",p2);
if (q2<0)
fprintf(out,"%d)",q2);
else
fprintf(out,"+%d)",q2);
fclose(in);
fclose(out);
return 0;
}
return 0;
}