Problem: A line on the plane is described by an equation Ax + By + C = 0. You are to find any point on this line, whose coordinates are integer numbers from  - 5·1018 to 5·1018 inclusive, or to find out that such points do not exist.

Input

The first line contains three integers A, B and C ( - 2·109 ≤ A, B, C ≤ 2·109) — corresponding coefficients of the line equation. It is guaranteed that A2 + B2 > 0.

Output

If the required point exists, output its coordinates, otherwise output -1.

Examples

Input

2 5 3


Output

6 -3

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.*;

public class Line {
	public static void main(String[] args) throws IOException {
		BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(f.readLine());
		long a = Long.parseLong(st.nextToken());
		long b = Long.parseLong(st.nextToken());
		long c = Long.parseLong(st.nextToken());
		long g = gcd(Math.abs(a),Math.abs(b));
		if (c % g != 0)
		{
			System.out.println(-1);
			return;
		}
		a /= g;
		b /= g;
		c /= g;
		if (a == 0)
		{
			System.out.println("0 "+-c/b);
			return;
		}
		if (b == 0)
		{
			System.out.println(-c/a+" 0");
			return;
		}
		if (a < 0)
		{
			a *= -1;
			b *= -1;
			c *= -1;
		}
		
		long y = -inv(b,a)*c %a;
		long x = (-b*y-c)/a;
		System.out.println(x+" "+y);
	}
	
	public static long gcd(long a, long b)
	{
		if (b==0)
			return a;
		return gcd(b,a%b);
	}
	
	public static long phi(long x)
	{
		boolean[] isPrime = new boolean[50000];
		Arrays.fill(isPrime,true);
		isPrime[0] = isPrime[1] = false;
		for (int i = 2; i*i < isPrime.length; i++)
			if (isPrime[i])
				for (int j = i; j*i < isPrime.length; j++)
					isPrime[j*i] = false;
		int count = 0;
		for (int i = 0; i < isPrime.length; i++)
			if (isPrime[i])
				count++;
		int[] primes = new int[count];
		count = 0;
		for (int i = 0; i < isPrime.length; i++)
			if (isPrime[i])
				primes[count++] = i;
		
		long[] p = new long[10];
		int[] a = new int[10];
		count = 0;
		
		int index = 0;
		while (x > 1)
		{
			while (x % primes[index] != 0 && primes[index]*primes[index] <= x)
				index++;
			long prime;
			if (x % primes[index] == 0)
				prime = primes[index];
			else
				prime = x;
			x /= prime;
			int pindex = -1;
			for (int i = 0; i < count; i++)
				if (p[i] == prime)
					pindex = i;
			if (pindex >= 0)
				a[pindex]++;
			else
			{
				p[count] = prime;
				a[count] = 1;
				count++;
			}
		}
		
		long phi = 1;
		for (int i = 0; i < count; i++)
			phi *= pow(p[i],a[i],1000000000000l)-pow(p[i],a[i]-1,1000000000000l);
		return phi;
	}
	
	public static long pow(long a, long n, long mod)
	{
		if (n == 0)
			return 1;
		long x = pow(a,n/2,mod);
		x = x*x % mod;
		if (n % 2 == 1)
			x = x*a % mod;
		return x;
	}
	
	public static long inv(long a, long mod)
	{
		return pow(a, phi(mod)-1, mod);
	}
}