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.math.BigInteger;
import java.util.*;

/**
 * BEGIN NO SAD
 * Blessed are those who suffer for doing what is right.
 * The kingdom of heaven belongs to them.
 * (Matthew 5:10-12)
 * @author Tran Anh Tai
 * @template for CP codes
 * END NO SAD
 */
public class ProbC {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        Task solver = new Task();
        solver.solve(in, out);
        out.close();
    }
    // main solver
    static class Task{
        boolean mark[] = new boolean[31622];
        ArrayList<Integer> primes = new ArrayList<>();
        public void solve(InputReader in, PrintWriter out) {
            int a = in.nextInt();
            int b = in.nextInt();
            int c = in.nextInt();
            int g = gcd(a, b);
            for (int i = 2; i <= 31621; i++){
                if (!mark[i]){
                    primes.add(i);
                    for (int j = i * 2; j <= 31621; j += i) mark[j] = true;
                }
            }
            if (c % g != 0){
                out.println(-1);
            }
            else{
                a /= g; b /= g; c /= g;
                if (b < 0) {
                    a = -a; b = -b; c = -c;
                }
                if (b == 0){
                    if (-c % a == 0){
                        out.println(-c /a + " " + 0);
                    }
                    else{
                        out.println(-1);
                    }
                    return;
                }
                int ex = EulerTotient(b) - 1;
                c = -c;
                String x = (new BigInteger(binpow(a, ex, b) + "")).multiply(new BigInteger((c) +"")).toString();
                String y = (new BigInteger(c + "").subtract(new BigInteger(a +"").multiply(new BigInteger(x)))).divide(new BigInteger(b +"")).toString();
                out.println(x + " " + y);
            }
        }

        private long binpow(long a, int ex, int b) {
            if (ex == 0){
                return 1;
            }
            long au = binpow(a, ex  >> 1, b);
            au = (au * au) % b;
            if ((ex & 1) == 1){
                au = (au * a) % b;
            }
            return au;
        }

        public int EulerTotient(int n){
            int result = n;
            for (int i = 2; i <= Math.sqrt(n); i++){
                if (!mark[i] && n % i == 0){
                    result = result / i * (i - 1);
                    while (n % i == 0) n = n / i;
                }
            }
            if (n > 1){
                result = result / n * (n - 1);
            }
            return result;
        }
        public int gcd(int a, int b){
            if (a == 0){
                return b;
            }
            return gcd(b % a, a);
        }
    }
    static class Pair{
        public int x, y;
        public Pair(int x, int y){
            this.x = x;
            this.y = y;
        }
    }
    static class Point{
        public double x, y;
        public Point(double x, double y){
            this.x = x; this.y = y;
        }
        public static Line getBisect(Point A, Point B){
            double a = B.x - A.x;
            double b = B.y - A.y;
            double c = a * (A.x + B.x) / 2 + b * (A.y + B.y) / 2;
            return new Line(a, b, c);
        }
        public static Point center(Point A, Point B, Point C){
            Line lab = getBisect(A, B);
            Line lac = getBisect(A, C);
            Point intersect = Line.intersect(lab, lac);
            return intersect;
        }
    }
    static class Line{
        public double a, b, c;
        public Line(double a, double b, double c){
            this.a = a; this.b = b; this.c = c;
        }
        public static Point intersect(Line l1, Line l2){
            double D = l1.a * l2.b - l1.b * l2.a;
            double Dy = l1.a * l2.c - l2.a * l1.c;
            double Dx = l1.c * l2.b - l2.c * l1.b;
            return new Point(Dx / D, Dy / D);
        }
    }
    // fast input reader class;
    static class InputReader {
        BufferedReader br;
        StringTokenizer st;

        public InputReader(InputStream stream) {
            br = new BufferedReader(new InputStreamReader(stream));
        }

        public String nextToken() {
            while (st == null || !st.hasMoreTokens()) {
                String line = null;
                try {
                    line = br.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (line == null) {
                    return null;
                }
                st = new StringTokenizer(line);
            }
            return st.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(nextToken());
        }
        public long nextLong(){
            return Long.parseLong(nextToken());
        }
    }
}