Manao has a monitor. The screen of the monitor has horizontal to vertical length ratio a:b. Now he is going to watch a movie. The movie's frame has horizontal to vertical length ratio c:d. Manao adjusts the view in such a way that the movie preserves the original frame ratio, but also occupies as much space on the screen as possible and fits within it completely. Thus, he may have to zoom the movie in or out, but Manao will always change the frame proportionally in both dimensions.

Calculate the ratio of empty screen (the part of the screen not occupied by the movie) to the total screen size. Print the answer as an irreducible fraction p / q.

Input

A single line contains four space-separated integers a, b, c, d (1 ≤ a, b, c, d ≤ 1000).

Output

Print the answer to the problem as "p/q", where p is a non-negative integer, q is a positive integer and numbers p and q don't have a common divisor larger than 1.

Examples

Input

1 1 3 2


Output

1/3


Input

4 3 2 2


Output

1/4

Note

Sample 1. Manao's monitor has a square screen. The movie has 3:2 horizontal to vertical length ratio. Obviously, the movie occupies most of the screen if the width of the picture coincides with the width of the screen. In this case, only 2/3 of the monitor will project the movie in the horizontal dimension: <image>

Sample 2. This time the monitor's width is 4/3 times larger than its height and the movie's frame is square. In this case, the picture must take up the whole monitor in the vertical dimension and only 3/4 in the horizontal dimension: <image>
import java.io.OutputStreamWriter;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.List;
import java.io.IOException;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.math.BigInteger;
import java.io.InputStream;
 
/**
  @author Anuj Rana
 */
public class Codeforcesb {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        OutputWriter out = new OutputWriter(outputStream);
        
        b solver = new b();
        
        solver.solve(1, in, out);
        out.close();
    }
}
 
class b {
    public void solve(int testNumber, InputReader in, OutputWriter out) {
        int a=in.readInt(),b=in.readInt(),c=in.readInt(),d=in.readInt();
        long hor=a*c*d;long ver=b*d*c;
        long cc=0;long dd=0;
        long remhor=0,remver=0;char flag;
        //out.printLine(hor+" "+ver);
        while(true){
            cc+=c;dd+=d;
            if(cc==hor){
                remver=ver-dd;flag='h';
                //out.printLine(remver+" "+flag);
                break;
            }
            if(dd==ver){
                remhor=hor-cc;flag='v';
                //out.printLine(remhor+" "+flag);
                break;
            }
        }
        
        if(flag=='h'){
            for(long i=2;i<=remver;i++){
                if(remver%i==0 && ver%i==0){
                    remver/=i;ver/=i;i--;
                }
            }
            if(remver==0)out.printLine(0+"/"+1);
            else
            out.printLine(remver+"/"+ver);
        }
        else if(flag=='v'){
            for(long i=2;i<=remhor;i++){
                if(remhor%i==0 && hor%i==0){
                    remhor/=i;hor/=i;i--;
                }
            }
            if(remhor==0)out.printLine(0+"/"+1);
            else
            out.printLine(remhor+"/"+hor);
        }
            
    }
}
 
class InputReader {
 
    private InputStream stream;
    private byte[] buf = new byte[1024];
    private int curChar;
    private int numChars;
    private SpaceCharFilter filter;
 
    public InputReader(InputStream stream) {
        this.stream = stream;
    }
 
    public int read() {
        if (numChars == -1)
            throw new InputMismatchException();
        if (curChar >= numChars) {
            curChar = 0;
            try {
                numChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (numChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }
 
    public int readInt() {
        int c = read();
        while (isSpaceChar(c))
            c = read();
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = read();
        }
        int res = 0;
        do {
            if (c < '0' || c > '9')
                throw new InputMismatchException();
            res *= 10;
            res += c - '0';
            c = read();
        } while (!isSpaceChar(c));
        return res * sgn;
    }
 
    public boolean isSpaceChar(int c) {
        if (filter != null)
            return filter.isSpaceChar(c);
        return isWhitespace(c);
    }
 
    public static boolean isWhitespace(int c) {
        return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }
 
    public interface SpaceCharFilter {
        public boolean isSpaceChar(int ch);
    }
}
 
class OutputWriter {
    private final PrintWriter writer;
 
    public OutputWriter(OutputStream outputStream) {
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    }
 
    public OutputWriter(Writer writer) {
        this.writer = new PrintWriter(writer);
    }
 
    public void print(Object...objects) {
        for (int i = 0; i < objects.length; i++) {
            if (i != 0)
                writer.print(' ');
            writer.print(objects[i]);
        }
    }
 
    public void printLine(Object...objects) {
        print(objects);
        writer.println();
    }
 
    public void close() {
        writer.close();
    }
 
    }
 
class IOUtils {
 
    public static int[] readIntArray(InputReader in, int size) {
        int[] array = new int[size];
        for (int i = 0; i < size; i++)
            array[i] = in.readInt();
        return array;
    }
 
    }
 
class IntegerUtils {
 
    public static int[] generatePrimes(int upTo) {
        boolean[] isPrime = generatePrimalityTable(upTo);
        IntList primes = new IntArrayList();
        for (int i = 0; i <= upTo; i++) {
            if (isPrime[i])
                primes.add(i);
        }
        return primes.toArray();
    }
 
    public static boolean[] generatePrimalityTable(int upTo) {
        boolean[] isPrime = new boolean[upTo+1];
        Arrays.fill(isPrime, true);
        isPrime[0] = isPrime[1] = false;
        for (int i = 2; i * i <= upTo; i++) {
            if (isPrime[i]) {
                for (int j = i * i; j <= upTo; j += i)
                    isPrime[j] = false;
            }
        }
        return isPrime;
    }
 
    public static long power(long base, long exponent, long mod) {
        if (base >= mod)
            base %= mod;
        if (exponent == 0)
            return 1 % mod;
        long result = power(base, exponent >> 1, mod);
        result = result * result % mod;
        if ((exponent & 1) != 0)
            result = result * base % mod;
        return result;
    }
 
    }
 
abstract class IntCollection {
    public abstract IntIterator iterator();
    public abstract int size();
    public abstract void add(int value);
 
    public int[] toArray() {
        int size = size();
        int[] array = new int[size];
        int i = 0;
        for (IntIterator iterator = iterator(); iterator.isValid(); iterator.advance())
            array[i++] = iterator.value();
        return array;
    }
 
    public void addAll(IntCollection values) {
        for (IntIterator it = values.iterator(); it.isValid(); it.advance()) {
            add(it.value());
        }
    }
 
    }
 
interface IntIterator {
    public int value() throws NoSuchElementException;
    /*
     * @throws NoSuchElementException only if iterator already invalid
     */
    public void advance() throws NoSuchElementException;
    public boolean isValid();
}
 
abstract class IntList extends IntCollection implements Comparable<IntList> {
 
    public abstract int get(int index);
 
    public IntIterator iterator() {
        return new IntIterator() {
            private int size = size();
            private int index = 0;
 
            public int value() throws NoSuchElementException {
                if (!isValid())
                    throw new NoSuchElementException();
                return get(index);
            }
 
            public void advance() throws NoSuchElementException {
                if (!isValid())
                    throw new NoSuchElementException();
                index++;
            }
 
            public boolean isValid() {
                return index < size;
            }
        };
    }
 
    public int hashCode() {
        int hashCode = 1;
        for (IntIterator i = iterator(); i.isValid(); i.advance())
            hashCode = 31 * hashCode + i.value();
        return hashCode;
    }
 
    public boolean equals(Object obj) {
        if (!(obj instanceof IntList))
            return false;
        IntList list = (IntList)obj;
        if (list.size() != size())
            return false;
        IntIterator i = iterator();
        IntIterator j = list.iterator();
        while (i.isValid()) {
            if (i.value() != j.value())
                return false;
            i.advance();
            j.advance();
        }
        return true;
    }
 
    public int compareTo(IntList o) {
        IntIterator i = iterator();
        IntIterator j = o.iterator();
        while (true) {
            if (i.isValid()) {
                if (j.isValid()) {
                    if (i.value() != j.value()) {
                        if (i.value() < j.value())
                            return -1;
                        else
                            return 1;
                    }
                } else
                    return 1;
            } else {
                if (j.isValid())
                    return -1;
                else
                    return 0;
            }
            i.advance();
            j.advance();
        }
    }
 
    }
 
class IntArrayList extends IntList {
    private int[] array;
    private int size;
 
    public IntArrayList() {
        this(10);
    }
 
    public IntArrayList(int capacity) {
        array = new int[capacity];
    }
 
    public IntArrayList(IntList list) {
        this(list.size());
        addAll(list);
    }
 
    public int get(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException();
        return array[index];
    }
 
    public int size() {
        return size;
    }
 
    public void add(int value) {
        ensureCapacity(size + 1);
        array[size++] = value;
    }
 
    public void ensureCapacity(int newCapacity) {
        if (newCapacity > array.length) {
            int[] newArray = new int[Math.max(newCapacity, array.length << 1)];
            System.arraycopy(array, 0, newArray, 0, size);
            array = newArray;
        }
    }
 
    public int[] toArray() {
        int[] array = new int[size];
        System.arraycopy(this.array, 0, array, 0, size);
        return array;
    }
 
    }