At a geometry lesson Gerald was given a task: to get vector B out of vector A. Besides, the teacher permitted him to perform the following operations with vector А:

  * Turn the vector by 90 degrees clockwise.
  * Add to the vector a certain vector C.



Operations could be performed in any order any number of times.

Can Gerald cope with the task?

Input

The first line contains integers x1 и y1 — the coordinates of the vector A ( - 108 ≤ x1, y1 ≤ 108). The second and the third line contain in the similar manner vectors B and C (their coordinates are integers; their absolute value does not exceed 108).

Output

Print "YES" (without the quotes) if it is possible to get vector B using the given operations. Otherwise print "NO" (without the quotes).

Examples

Input

0 0
1 1
0 1


Output

YES


Input

0 0
1 1
1 1


Output

YES


Input

0 0
1 1
2 2


Output

NO
import java.io.*;
import java.util.*;
import java.math.*;

public class C implements Runnable {
	private final boolean useStandardIO = true;
	private final String inFile = ".in";
	private final String outFile = ".out";

	boolean go(long x, long y, long a, long b){
		long d = -a*a-b*b;
		if (d == 0){
			return x == 0 && y == 0;
		}
		long k = -x*a-y*b;
		long t = a*y-b*x;
		
		return k % d == 0 && t % d == 0;
	}
	
	private void solve() throws IOException {
		long ax = nextLong(), ay=nextLong();
		long bx = nextLong(), by=nextLong();
		long cx = nextLong(), cy=nextLong();
		boolean can = false;
		long nx = bx-ax, ny = by-ay;
		
		can = can || go(nx, ny, cx, cy);
		
		nx = bx-ay; ny = by+ax;
		
		can = can || go(nx, ny, cx, cy);
		
		nx = bx+ax; ny = by+ay;
		
		can = can || go(nx, ny, cx, cy);
		
		nx = bx+ay; ny = by-ax;
		
		can = can || go(nx, ny, cx, cy);
		
		if (can) writer.println("YES"); else writer.println("NO");
	}

	public static void main(String[] args) {
		new Thread(null, new C(), "", 64 * 1024 * 1024).run();
	}

	BufferedReader reader;
	StringTokenizer tokenizer;
	PrintWriter writer;

	public void run() {
		try {
			try {
				Locale.setDefault(Locale.US);
			} catch (Exception e) {
			}
			if (useStandardIO) {
				reader = new BufferedReader(new InputStreamReader(System.in));
				writer = new PrintWriter(System.out);
			} else {
				reader = new BufferedReader(new FileReader(inFile));
				writer = new PrintWriter(new FileWriter(outFile));
			}
			tokenizer = null;
			solve();
			//reader.close();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}

	BigInteger nextBigInteger() throws IOException {
		return new BigInteger(nextToken());
	}

	String nextToken() throws IOException {
		while (tokenizer == null || !tokenizer.hasMoreTokens()) {
			tokenizer = new StringTokenizer(reader.readLine());
		}
		return tokenizer.nextToken();
	}
}