Problem: Arpa is taking a geometry exam. Here is the last problem of the exam.

You are given three points a, b, c.

Find a point and an angle such that if we rotate the page around the point by the angle, the new position of a is the same as the old position of b, and the new position of b is the same as the old position of c.

Arpa is doubting if the problem has a solution or not (i.e. if there exists a point and an angle satisfying the condition). Help Arpa determine if the question has a solution or not.

Input

The only line contains six integers ax, ay, bx, by, cx, cy (|ax|, |ay|, |bx|, |by|, |cx|, |cy| ≤ 109). It's guaranteed that the points are distinct.

Output

Print "Yes" if the problem has a solution, "No" otherwise.

You can print each letter in any case (upper or lower).

Examples

Input

0 1 1 1 1 0


Output

Yes


Input

1 1 0 0 1000 1000


Output

No

Note

In the first sample test, rotate the page around (0.5, 0.5) by <image>.

In the second sample test, you can't find any solution.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int RNG = 100003;
const int MOD1 = 1e9 + 7;
const int MOD2 = 1e9 + 87;
const double pi = 2 * acos(0.0);
inline int _Int() {
  int x;
  scanf("%d", &x);
  return x;
}
inline long long _LLi() {
  long long x;
  scanf("%lld", &x);
  return x;
}
void pruts() {
  puts("-1");
  exit(EXIT_SUCCESS);
}
int dirX[] = {1, 0, -1, 0, 1, -1, 1, -1};
int dirY[] = {0, 1, 0, -1, 1, -1, -1, 1};
int rX[] = {1, 1, 2, 2, -1, -1, -2, -2};
int rY[] = {2, -2, 1, -1, 2, -2, 1, -1};
template <class T>
T tri_Area(T x1, T y1, T x2, T y2, T x3, T y3) {
  return abs(x1 * (y2 - y3) - y1 * (x2 - x3) + (x2 * y3 - x3 * y2));
};
template <class T>
T Distance(T x1, T y1, T x2, T y2) {
  return ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
};
template <class T>
T bigMod(T n, T p, T m) {
  if (p == 0) return 1;
  if (p & 1) return (n * bigMod(n, p - 1, m)) % m;
  T x = bigMod(n, p / 2, m);
  return (x * x) % m;
};
int Case;
int sset(int N, int pos) { return N = N | (1 << pos); }
bool check(int N, int pos) { return (bool)(N & (1 << pos)); }
int reset(int N, int pos) { return N = N & ~(1 << pos); }
long long P[10];
void Hunger() {
  for (int i = 0; i < 6; i++) P[i] = _Int();
  long long d1 = Distance(P[0], P[1], P[2], P[3]);
  long long d2 = Distance(P[4], P[5], P[2], P[3]);
  long long d = tri_Area(P[0], P[1], P[2], P[3], P[4], P[5]);
  if ((!d))
    puts("No");
  else if (d1 != d2)
    puts("No");
  else
    puts("Yes");
}
int main() {
  Hunger();
  return 0;
}