Problem: The Easter Rabbit laid n eggs in a circle and is about to paint them. 

Each egg should be painted one color out of 7: red, orange, yellow, green, blue, indigo or violet. Also, the following conditions should be satisfied:

  * Each of the seven colors should be used to paint at least one egg. 
  * Any four eggs lying sequentially should be painted different colors. 



Help the Easter Rabbit paint the eggs in the required manner. We know that it is always possible.

Input

The only line contains an integer n — the amount of eggs (7 ≤ n ≤ 100).

Output

Print one line consisting of n characters. The i-th character should describe the color of the i-th egg in the order they lie in the circle. The colors should be represented as follows: "R" stands for red, "O" stands for orange, "Y" stands for yellow, "G" stands for green, "B" stands for blue, "I" stands for indigo, "V" stands for violet.

If there are several answers, print any of them.

Examples

Input

8


Output

ROYGRBIV


Input

13


Output

ROYGBIVGBIVYG

Note

The way the eggs will be painted in the first sample is shown on the picture: 

<image>

Solution (in CPP):

Solution:
#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}};
const int neigh9[][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0},
                         {1, 1},  {0, 1},   {-1, 1}, {0, 0}};
template <typename T1>
class Vector3D {
 public:
  T1 x, y, z;
  Vector3D(T1 x1, T1 y1, T1 z1) : x(x1), y(y1), z(z1) {}
  Vector3D() {}
};
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 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 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 long int euclideanDistSq(long long int x1, long long int y1,
                              long long int x2, long long int y2) {
  return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
template <typename T1>
T1 dotProd(T1 x1, T1 y1, T1 z1, T1 x2, T1 y2, T1 z2) {
  return x1 * x2 + y1 * y2 + z1 * z2;
}
template <typename T1>
Vector3D<T1> crossProd(Vector3D<T1> v1, Vector3D<T1> v2) {
  Vector3D<T1> v;
  v.x = v1.y * v2.z - v2.y * v1.z;
  v.y = v1.z * v2.x - v2.z * v1.x;
  v.z = v1.x * v2.y - v2.x * v1.y;
  return v;
}
}  // namespace QL_Bare_Minimum
}  // namespace QoE_Library
using namespace QoE_Library::QL_Bare_Minimum;
int main() {
  int t, i = 0;
  cin >> t;
  for (int i = (0); i < (t - 3); i = i + (1)) {
    cout << "ROYG"[i % 4];
  }
  cout << "BIV" << endl;
}