Problem: Petya loves lucky numbers. Everybody knows that positive integers are lucky if their decimal representation doesn't contain digits other than 4 and 7. For example, numbers 47, 744, 4 are lucky and 5, 17, 467 are not.

Lucky number is super lucky if it's decimal representation contains equal amount of digits 4 and 7. For example, numbers 47, 7744, 474477 are super lucky and 4, 744, 467 are not.

One day Petya came across a positive integer n. Help him to find the least super lucky number which is not less than n.

Input

The only line contains a positive integer n (1 ≤ n ≤ 10100000). This number doesn't have leading zeroes.

Output

Output the least super lucky number that is more than or equal to n.

Examples

Input

4500


Output

4747


Input

47


Output

47

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
bool isPrime(long long n) {
  if (n <= 1) return false;
  for (int i = 2; i <= sqrt(n); i++)
    if (n % i == 0) return false;
  return true;
}
long long factorial(long long n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n - 1);
}
bool primeFactors(int n, int l, int r, bool notFound) {
  for (int i = l; i <= r; i++) {
    if (i == 1) i++;
    if (n % i == 0) {
      cout << i << " ";
      notFound = false;
    }
    while (n % i == 0) {
      n = n / i;
    }
  }
  return notFound;
}
bool IsInBinarySequence(long long number) {
  long long numbertocheck = 1;
  do {
    if (number == numbertocheck) return true;
    numbertocheck *= 2;
  } while (numbertocheck <= number);
  return false;
}
long long nextPowerOf2(long long n) {
  if (n && !(n & (n - 1))) return n;
  long long cnt = 0;
  while (n != 0) {
    n >>= 1;
    cnt++;
  }
  long long x = 1;
  x = x << cnt;
  return x;
}
long long highestPowerof2(long long n) {
  long long res = 0;
  for (long long i = n; i >= 1; i--) {
    if ((i & (i - 1)) == 0) {
      res = i;
      break;
    }
  }
  return res;
}
long long fib(long long n) {
  if (n <= 1) return 1;
  return fib(n - 1) + fib(n - 2);
}
long long binets_formula(long long n) {
  double sqrt5 = sqrt(5);
  int F_n = (pow((1 + sqrt5), n) - pow((1 - sqrt5), n)) / (pow(2, n) * sqrt5);
  return F_n;
}
void first50fib() {
  long long arr[] = {
      1,          1,           2,          3,          5,          8,
      13,         21,          34,         55,         89,         144,
      233,        377,         610,        987,        1597,       2584,
      4181,       6765,        10946,      17711,      28657,      46368,
      75025,      121393,      196418,     317811,     514229,     832040,
      1346269,    2178309,     3524578,    5702887,    9227465,    14930352,
      24157817,   39088169,    63245986,   102334155,  165580141,  267914296,
      433494437,  701408733,   1134903170, 1836311903, 2971215073, 4807526976,
      7778742049, 12586269025, 20365011074};
}
int binarySearch(int a[], int first, int last, int search_num) {
  int middle;
  if (last >= first) {
    middle = (first + last) / 2;
    if (a[middle] == search_num) {
      return middle + 1;
    } else if (a[middle] < search_num) {
      return binarySearch(a, middle + 1, last, search_num);
    } else {
      return binarySearch(a, first, middle - 1, search_num);
    }
  }
  return -1;
}
void factorize(long long n) {
  int count = 0;
  while (!(n % 2)) {
    n /= 2;
    count++;
  }
  if (count) cout << 2 << "^" << count << endl;
  for (long long i = 3; i <= sqrt(n); i += 2) {
    count = 0;
    while (n % i == 0) {
      count++;
      n = n / i;
    }
    if (count) cout << i << "^" << count << endl;
  }
  if (n > 2) cout << n << "^" << 1 << endl;
}
void primeFactors(long long num) {
  long long fac = 2;
  while (num > 1) {
    if (num % fac == 0) {
      cout << "(" << fac << "^";
      num /= fac;
      long long pow = 1;
      while (num % fac == 0) {
        num /= fac;
        pow++;
      }
      cout << pow;
      if (num != 1) cout << ")*";
    } else {
      fac++;
    }
  }
}
bool onePrimeFactor(long long num) {
  long long fac = 2;
  int cnt = 0;
  while (num > 1) {
    if (num % fac == 0) {
      cnt++;
      while (num % fac == 0) num /= fac;
    } else {
      fac++;
    }
    if (cnt >= 2) {
      return false;
    }
  }
  return true;
}
bool isPerfect(long long d) {
  double temp = d;
  d = sqrt(d);
  temp = sqrt(temp);
  if (temp == d) return true;
  return false;
}
void sort(string s[], int n) {
  for (int i = 1; i < n; i++) {
    string temp = s[i];
    int j = i - 1;
    while (j >= 0 && temp.length() < s[j].length()) {
      s[j + 1] = s[j];
      j--;
    }
    s[j + 1] = temp;
  }
}
bool IsPowerOfTwo(long long x) { return (x & (x - 1)) == 0; }
int binarySearchCount(int arr[], int n, int key) {
  int left = 0, right = n;
  int mid;
  while (left < right) {
    mid = (right + left) >> 1;
    if (arr[mid] == key) {
      while (mid + 1 < n && arr[mid + 1] == key) mid++;
      break;
    } else if (arr[mid] > key)
      right = mid;
    else
      left = mid + 1;
  }
  while (mid > -1 && arr[mid] > key) mid--;
  return mid + 1;
}
bool is(int x, int y) {
  set<int> s;
  if (x < 10000) {
    s.insert(0);
  }
  if (y < 10000) {
    s.insert(0);
  }
  while (x > 0) {
    int d = x % 10;
    s.insert(d);
    x /= 10;
  }
  while (y > 0) {
    int d = y % 10;
    s.insert(d);
    y /= 10;
  }
  return s.size() == 10;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long i, n;
  set<long long> k;
  string s[] = {"47", "4477", "444777", "44447777", "4444477777"};
  for (i = 0; i < 5; i++) {
    do {
      k.insert(stoll(s[i]));
    } while (next_permutation(s[i].begin(), s[i].end()));
  }
  cin >> n;
  cout << *k.lower_bound(n);
}