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 static java.lang.Math.*;
import static java.lang.System.currentTimeMillis;
import static java.lang.System.exit;
import static java.lang.System.arraycopy;
import static java.util.Arrays.sort;
import static java.util.Arrays.binarySearch;
import static java.util.Arrays.fill;
import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {
		try {
			if (new File("input.txt").exists())
				System.setIn(new FileInputStream("input.txt"));
		} catch (SecurityException e) {
		}
		new Main().run();
	}

	BufferedReader in;
	PrintWriter out;
	StringTokenizer st = new StringTokenizer("");

	class NOD{
		long x, y, d;
		NOD(long dd, long xx, long yy){
			x = xx;
			y = yy;
			d = dd;
		}
	}

	NOD eGCD(long a, long b)
	{
		if (b == 0)
			return new NOD(a, 1, 0);
		NOD res = eGCD(b, a % b);
		res = new NOD(res.d, res.y, res.x - a / b * res.y);
		return res;
	}
	
	private void run() throws IOException {
		in = new BufferedReader(new InputStreamReader(System.in));
		out = new PrintWriter(System.out);
		long a = nextLong();
		long b = nextLong();
		long c = nextLong();
		boolean swapped = false;
		if (b == 0) {
			long t = a;
			a = b;
			b = t;
			swapped = true;
		}
		if (b < 0) {
			a = -a;
			b = -b;
			c = -c;
		}
		long rc = -c % b;
		if (rc < 0)
			rc += b;
		long ra = a % b;
		if (ra < 0)
			ra += b;
		NOD gcd = eGCD(ra, b);
		if (rc % gcd.d != 0)
			out.println(-1);
		else {
			long x = gcd.x * rc / gcd.d % b;
			long y = (-c - a * x) / b;
			if (!swapped)
				out.println(x + " " + y);
			else
				out.println(y + " " + x);
		}
		in.close();
		out.close();
	}

	void chk(boolean b) {
		if (b)
			return;
		System.out.println(new Error().getStackTrace()[1]);
		exit(999);
	}
	void deb(String fmt, Object... args) {
		System.out.printf(Locale.US, fmt + "%n", args);
	}
	String nextToken() throws IOException {
		while (!st.hasMoreTokens())
			st = new StringTokenizer(in.readLine());
		return st.nextToken();
	}
	int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}
	long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}
	double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}
	String nextLine() throws IOException {
		st = new StringTokenizer("");
		return in.readLine();
	}
	boolean EOF() throws IOException {
		while (!st.hasMoreTokens()) {
			String s = in.readLine();
			if (s == null)
				return true;
			st = new StringTokenizer(s);
		}
		return false;
	}
}