#include <stdio.h>
#include <math.h>

double p,q,inf=10e40,eps=1e-13;

double f(double x)
{
  return x*x*x+p*x+q;
}

double getroot(double min, double max)
{
  double mid;
  double sgn;
  double eps2=eps;
  if(f(min)>0)
    sgn=1;
  else
    sgn=-1;
  while(fabs(min-max)>eps2)
  {
    mid=(min+max)/2;
    if(f(mid)*sgn>=0)
      min=mid;
    else  
      max=mid;
    eps2=fabs(mid)*eps;
    if(eps2<eps)
      eps2=eps;
  }
  return min;
}

int main(void)
{
  double roots[3];
  int rootcount;
  while(scanf("%lf%lf",&p,&q)==2)
  {
    rootcount=0;
    if(p<0)
    {
      double extr=sqrt(-p/3);
      if(fabs(f(extr))<eps)
      {
        roots[rootcount]=extr;
        rootcount++;
        roots[rootcount]=getroot(-inf,-extr);
        rootcount++;
      }
      else if(f(extr)>0) 
      {
        roots[rootcount]=getroot(-inf,-extr);
        rootcount++;
      }
      else if(f(extr)<0) 
      {
        roots[rootcount]=getroot(extr,inf);
        rootcount++;
        if(fabs(f(-extr))<eps)
        { 
          roots[rootcount]=-extr;
          rootcount++;
        }
        else if(f(-extr)>0) 
        {
          roots[rootcount]=getroot(-extr,extr);
          rootcount++;
          roots[rootcount]=getroot(-inf,-extr);
          rootcount++;
        }
      }
    }
    else
    {
      roots[rootcount]=getroot(-inf,inf);
      rootcount++;
    }
    for(int i=rootcount-1; i>=0; i--)
      printf("%.10g\n",roots[i]);
  }
  return 0;
}
