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>
using namespace std;
const long long int INF = (long long int)1e9 + 10;
const long long int INFLL = (long long int)1e18 + 10;
const long double EPS = 1e-8;
const long double EPSLD = 1e-18;
const long long int MOD = 1e9 + 7;
template <class T>
T &chmin(T &a, const T &b) {
  return a = min(a, b);
}
template <class T>
T &chmax(T &a, const T &b) {
  return a = max(a, b);
}
long long int ax, ay, bx, by, bxa, bya, bxb, byb;
bool check(long long int arx, long long int ary) {
  long long int tx = bx - arx;
  long long int ty = by - ary;
  if (bxa == 0 && bya == 0) return tx == 0 && ty == 0;
  long long int dor = bxa * byb - bxb * bya;
  assert(dor != 0);
  long long int nx = byb * tx - bxb * ty;
  long long int ny = -bya * tx + bxa * ty;
  return nx % dor == 0 && ny % dor == 0;
}
int main() {
  scanf("%lld %lld", &ax, &ay);
  scanf("%lld %lld", &bx, &by);
  scanf("%lld %lld", &bxa, &bya);
  bxb = -bya;
  byb = bxa;
  if (check(ax, ay) || check(-ax, -ay) || check(ay, -ax) || check(-ay, ax))
    puts("YES");
  else
    puts("NO");
  return 0;
}
