Problem: Polycarp loves ciphers. He has invented his own cipher called repeating.

Repeating cipher is used for strings. To encrypt the string s=s_{1}s_{2} ... s_{m} (1 ≤ m ≤ 10), Polycarp uses the following algorithm:

  * he writes down s_1 ones, 
  * he writes down s_2 twice, 
  * he writes down s_3 three times, 
  * ... 
  * he writes down s_m m times. 



For example, if s="bab" the process is: "b" → "baa" → "baabbb". So the encrypted s="bab" is "baabbb".

Given string t — the result of encryption of some string s. Your task is to decrypt it, i. e. find the string s.

Input

The first line contains integer n (1 ≤ n ≤ 55) — the length of the encrypted string. The second line of the input contains t — the result of encryption of some string s. It contains only lowercase Latin letters. The length of t is exactly n.

It is guaranteed that the answer to the test exists.

Output

Print such string s that after encryption it equals t.

Examples

Input


6
baabbb


Output


bab

Input


10
ooopppssss


Output


oops

Input


1
z


Output


z

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
template <class Type>
Type max_in_array(vector<Type> arr) {
  Type m = arr[0];
  for (auto i : arr)
    if (i > m) m = i;
  return m;
}
template <class Type>
Type min_in_array(vector<Type> arr) {
  Type m = arr[0];
  for (auto i : arr)
    if (i < m) m = i;
  return m;
}
template <class Type>
long long sum_of_array(vector<Type> arr) {
  long long m = 0;
  for (auto i : arr) m += i;
  return m;
}
template <class Type>
Type binpow(Type value, int pow) {
  Type res = 1;
  while (pow) {
    if (pow & 1) res *= value;
    value *= value;
    pow >>= 1;
  }
  return res;
}
unsigned long long binpowmod(unsigned long long value, unsigned long long pow,
                             unsigned long long m) {
  unsigned long long res = 1;
  while (pow) {
    if (pow & 1) {
      res *= value;
      res %= m;
    }
    value *= value;
    value %= m;
    pow >>= 1;
  }
  return res;
}
long long gcd(long long a, long long b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
set<long long> reshset(long long n) {
  set<long long> s;
  vector<bool> a(n + 1);
  for (long long i = 0; i < n + 1; i += 1) a[i] = true;
  for (long long i = 2; i < n + 1; i += 1) {
    if (!a[i]) continue;
    s.insert(i);
    for (long long j = i; j < n + 1; j += i) a[j] = false;
  }
  return s;
}
vector<long long> reshvec(long long n) {
  vector<long long> v;
  vector<bool> a(n + 1);
  for (long long i = 0; i < n + 1; i += 1) a[i] = true;
  for (long long i = 2; i < n + 1; i += 1) {
    if (!a[i]) continue;
    v.push_back(i);
    for (long long j = i; j < n + 1; j += i) a[j] = false;
  }
  return v;
}
bool prime(long long x, long long k) {
  for (long long i = 0; i < k; i += 1) {
    long long a = rand() % (x - 1) + 1;
    if (gcd(a, x) != 1) return false;
    if (binpowmod(a, x - 1, x) != 1) return false;
  }
  return true;
}
int main() {
  string s;
  cin >> s;
  int l1 = 0;
  int l2 = s.size() - 1;
  string ans;
  if (s.size() % 2 != 0) {
    while (l1 != l2) {
      ans += s[l1];
      ans += s[l2];
      l1++;
      l2--;
    }
    ans += s[l1];
  } else {
    while (l1 != l2 - 1) {
      ans += s[l2];
      ans += s[l1];
      l1++;
      l2--;
    }
    ans += s[l2];
    ans += s[l1];
  }
  reverse(ans.begin(), ans.end());
  cout << ans;
  return 0;
}