/*
AizuOnline A1106
Title
*/
#include <stdio.h>
// Select Below
//#include <stdlib.h>
//#include <string.h>
#include <float.h>
#include <math.h>
//#include <limits.h>
//Global data section
int a,b,c;
//
int gcd(int x, int y){
	return y == 0 ? x: gcd(y, x%y);
}

main()
{
  int d,d2;
  int p,q,r,s,gcdpq,gcdrs;

  while(EOF!=scanf("%d %d %d",&a,&b,&c) && (a||b||c))
    {
      if(c ==0)
	{
	  if(a > 1 || (a ==1 && b >= 0))
	    printf("%d %d 1 0\n",a,b);
	  else
	    printf("1 0 %d %d\n",a,b);
	  continue;
	}
      d= b*b-4*a*c;
      if(d < 0)             // Imaginal
	{
	  printf("Impossible\n");
	}
      else if (d == 0)      // KANZEN HEIHOU
	{
	  p=sqrt(a);q=sqrt(c);
	  if(p*p==a && q*q == c)
	    {
	      if(b>0)
		printf("%d %d %d %d\n",p,q,p,q);
	      else
		printf("%d %d %d %d\n",p,-q,p,-q);
	    }
	  else
	    {
	      printf("Impossible\n");
	    }
	}
      else
	{
	  d2 = sqrt((double)(d));
	  if(d2*d2 == d)
	    {
	      p=r=2*a;
	      q=-b+d2;
	      s=-b-d2;
	      
	      gcdpq= gcd(p,q);
	      if(gcdpq < 0)gcdpq= -gcdpq;
	      p /= gcdpq;
	      q /= gcdpq;
	      gcdrs= gcd(r,s);
	      if(gcdrs < 0)gcdrs= -gcdrs;
	      r /= gcdrs;
	      s /= gcdrs;
	      if(p > r ||((p == r)&& -q >= -s))
		printf("%d %d %d %d\n",p,-q,r,-s);
	      else
		printf("%d %d %d %d\n",r,-s,p,-q);
	    }
	  else
	    {
	      printf("Impossible\n");
	    }
	}
    }
return(0);
}