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
#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000")
using namespace std;
long long x, y, xx, yy, dx, dy, n;
bool res;
bool F() {
  long long d1 = -dx * (y - yy) - dy * (xx - x);
  long long d2 = dx * dx + dy * dy;
  if (d2 == 0) return false;
  if (d1 % d2 != 0) return false;
  long long k2 = d1 / d2;
  d1 = xx - x + k2 * dy;
  d2 = dx;
  if (d2 == 0) return false;
  return (d1 % d2 == 0);
}
int main() {
  cin >> x >> y;
  cin >> xx >> yy;
  cin >> dx >> dy;
  res = false;
  if (x == xx && y == yy)
    res = true;
  else {
    for (int(j) = (0); (j) < (4); ++(j)) {
      long long xx_new, yy_new;
      xx_new = -yy;
      yy_new = xx;
      xx = xx_new;
      yy = yy_new;
      for (int(i) = (0); (i) < (4); ++(i)) {
        long long dx_new, dy_new;
        dx_new = -dy;
        dy_new = dx;
        dx = dx_new;
        dy = dy_new;
        if (F()) res = true;
      }
      if (dx == 0 || dy == 0)
        if (xx == x && yy == y) res = true;
    }
  }
  cout << (res == true ? "YES" : "NO") << endl;
}
