One cold winter evening Alice and her older brother Bob was sitting at home near the fireplace and giving each other interesting problems to solve. When it was Alice's turn, she told the number n to Bob and said:

—Shuffle the digits in this number in order to obtain the smallest possible number without leading zeroes.

—No problem! — said Bob and immediately gave her an answer.

Alice said a random number, so she doesn't know whether Bob's answer is correct. Help her to find this out, because impatient brother is waiting for the verdict.

Input

The first line contains one integer n (0 ≤ n ≤ 109) without leading zeroes. The second lines contains one integer m (0 ≤ m ≤ 109) — Bob's answer, possibly with leading zeroes.

Output

Print OK if Bob's answer is correct and WRONG_ANSWER otherwise.

Examples

Input

3310
1033


Output

OK


Input

4
5


Output

WRONG_ANSWER
#include <bits/stdc++.h>
using namespace std;
namespace QoE_Library {
namespace QL_Bare_Minimum {
const double PI = 3.141592653589793238460;
const long double pi = 10000 * acos(-1.0L);
const long double E = 2.7182818284590452353;
const long double eps = 1e-10;
const int DX4[] = {0, 1, 0, -1};
const int DY4[] = {1, 0, -1, 0};
const int DX8[] = {-1, -1, -1, 0, 0, 1, 1, 1};
const int DY8[] = {-1, 0, 1, -1, 1, -1, 0, 1};
const int neigh4[][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
const int neigh8[][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},
                         {1, 0},  {1, 1},   {0, 1},  {-1, 1}};
template <typename T1>
inline T1 to_type(string s) {
  T1 a;
  istringstream sin(s);
  sin >> a;
  return a;
}
template <typename T1>
inline string to_str(T1 a) {
  ostringstream sout;
  string s;
  sout >> a;
  return sout.str();
}
inline void inpS(char *a) { scanf("%s", a); }
inline int inpLLI(long long int &lld) { return scanf("%lld", &lld); }
inline int inpULLI(unsigned long long int &ulli) {
  return scanf("%llu", &ulli);
}
inline int inpI() {
  int n = 0;
  int ch = getchar();
  int sign = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') sign = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    n = (n << 3) + (n << 1) + ch - '0', ch = getchar();
  n = n * sign;
  return n;
}
inline void inpI2(int &a, int &b) {
  a = inpI();
  b = inpI();
}
inline void inpI3(int &a, int &b, int &c) {
  a = inpI();
  b = inpI();
  c = inpI();
}
inline double inpD() {
  double res = 0.0;
  char c;
  while (1) {
    c = getchar();
    if (c == ' ' || c == '\n')
      continue;
    else
      break;
  }
  res = c - '0';
  while (1) {
    c = getchar();
    if (c >= '0' && c <= '9')
      res = 10 * res + c - '0';
    else
      break;
  }
  if (c == '.') {
    double decimal = 0.0, divi = 1.0;
    while (1) {
      c = getchar();
      if (c >= '0' && c <= '9')
        decimal += (c - '0') / (divi *= 10.0);
      else
        break;
    }
    res += decimal;
  }
  return res;
}
inline void outpD(double N) {
  char buff[24], sz = 0;
  int integer = N;
  int decimal = (N - integer) * 10000000;
  int tmp = decimal;
  while (decimal) {
    buff[sz++] = '0' + decimal % 10;
    decimal /= 10;
  }
  for (int decimal2 = 1000000; decimal2 > tmp; decimal2 /= 10) {
    buff[sz++] = '0';
  }
  buff[sz++] = '.';
  if (integer == 0) buff[sz++] = '0';
  while (integer) {
    buff[sz++] = '0' + integer % 10;
    integer /= 10;
  }
  while (--sz >= 0) putchar(buff[sz]);
  putchar(10);
}
inline int outpULLI(unsigned long long int u) { return printf("%llu\n", u); }
inline int outpLLI(long long int lli) { return printf("%lld\n", lli); }
inline void outpI(int a) {
  char c;
  char snum[20];
  int i = 0;
  int sign = 0;
  if (a < 0) sign = 1;
  a = abs(a);
  do {
    snum[i++] = a % 10 + 48;
    a = a / 10;
  } while (a != 0);
  i = i - 1;
  if (sign) putchar('-');
  while (i >= 0) putchar(snum[i--]);
  putchar('\n');
}
inline void outpI2(int a, int b) {
  printf("%d ", a);
  outpI(b);
}
inline int outpS(char *s) { return printf("%s\n", s); }
template <typename T1>
void QL_swap(T1 &x, T1 &y) {
  T1 tmp;
  tmp = x;
  x = y;
  y = tmp;
}
template <typename T1>
T1 gcd(T1 a, T1 b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long double euclideanDist(int x1, int y1, int x2, int y2) {
  return sqrt((x1 - x2) * (x1 - x2) / 1. + (y1 - y2) * (y1 - y2) / 1.);
}
}  // namespace QL_Bare_Minimum
}  // namespace QoE_Library
using namespace QoE_Library::QL_Bare_Minimum;
int findContEmptySpace(int *a, int m, int v) {
  for (int i = (0); i < (m - v + 1); i = i + (1)) {
    if (!a[i]) {
      int j = i;
      while (j < i + v) {
        if (a[j]) break;
        ++j;
      }
      if (j == i + v) return i;
      i = j;
    }
  }
  return -1;
}
void defragment(int *a, int m, map<int, pair<int, int> > ls) {
  for (int i = (0); i < (m); i = i + (1)) {
    int j = i;
    while (j < m && !a[j]) ++j;
    int free = j - i;
    int s = j;
    if (free) {
      map<int, pair<int, int> >::iterator it;
      for (it = ls.begin(); it != ls.end(); ++it) {
        if (it->second.first == j) {
          break;
        }
      }
      if (it != ls.end()) {
        int s1 = it->second.first;
        int s2 = it->second.second;
        for (int k = (s1 - free); k < (s1); k = k + (1)) a[k] = 1;
        for (int k = (s2 - free); k < (s2); k = k + (1)) a[k] = 0;
        it->second.first -= free;
        it->second.second -= free;
        i = it->second.first;
      }
    } else
      i = j;
  }
}
int main() {
  int T = 1, n, c;
  while (T--) {
    cin >> n;
    string c;
    cin >> c;
    vector<int> v;
    while (n) {
      v.push_back(n % 10);
      ;
      n /= 10;
    }
    if (!v.size()) {
      v.push_back(0);
      ;
    } else {
      sort(v.begin(), v.end());
      int i = 0;
      if (!v[i]) {
        while (i < v.size() && !v[i]) ++i;
        swap(v[0], v[i]);
      }
    }
    bool b = 1;
    for (int i = (0); i < (v.size()); i = i + (1)) {
      if (i == c.length() || c[i] - '0' != v[i]) {
        b = 0;
        break;
      }
    }
    if (b)
      cout << "OK";
    else
      cout << "WRONG_ANSWER";
    cout << endl;
  }
}
