#include <bits/stdc++.h>
using namespace std;
long long int l1[200005], l2[200005], vis[200005], s = 0, m;
long long int dx[] = {1, 0, -1, 0};
long long int dy[] = {0, -1, 0, 1};
vector<pair<long long int, long long int>> p2;
char s2[100005];
int tree[100005 * 4];
void STB(int at, int L, int R) {
  if (L == R) {
    tree[at] = (s2[L - 1] - '0');
    return;
  }
  int mid = (L + R) / 2;
  STB(2 * at, L, mid);
  STB(2 * at + 1, mid + 1, R);
}
void update(int at, int L, int R, int pos1, int pos2) {
  if (L > pos2 || R < pos1) return;
  if (L >= pos1 && R <= pos2) {
    tree[at] ^= 1;
    return;
  }
  int mid = (L + R) >> 1;
  update((at << 1), L, mid, pos1, pos2);
  update((at << 1) + 1, mid + 1, R, pos1, pos2);
}
int query(int at, int L, int R, int l) {
  if (L == R) return tree[at];
  if (L > l && l > R) return 0;
  int mid = (L + R) >> 1;
  if (l <= mid)
    return tree[at] ^ query((at << 1), L, mid, l);
  else
    return tree[at] ^ query((at << 1) + 1, mid + 1, R, l);
}
bool revp(const pair<long long int, long long int>& a,
          const pair<long long int, long long int>& b) {
  if (a.first != b.first)
    return a.first > b.first;
  else
    return a.second < b.second;
}
bool revp2(const pair<long long int, long long int>& a,
           const pair<long long int, long long int>& b) {
  return a.second < b.second;
}
long long int ones(long long int n) {
  long long int s = 0;
  while (n > 0) {
    if (n & 1) s++;
    n = n >> 1;
  }
  return s;
}
int main() {
  long long int t, i, x, q, n, c, m, k, l,
      cases = 0, d, p, nl, np, a, e = 1, b, x2 = -1, x1 = 1000000005, x3 = 0,
      x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0;
  double x10 = 100000, x14, x15, x16, x17, x18;
  char x11, y1, y2, y3;
  int x12 = 0;
  string s3, s4, s5, s6, s7, s8;
  queue<long long int> q2;
  vector<long long int> vp;
  set<long long int> y4;
  map<long long int, long long int> m2;
  cin >> t;
  cin >> s3;
  n = s3.size();
  if (n & 1) {
    for (int i = 0; i < n; i++) {
      cout << s3[i];
      if ((i + 1) == (n - 3))
        cout << '-';
      else if ((i + 1) % 2 == 0 && (i + 1) < n - 3)
        cout << '-';
    }
  } else {
    for (int i = 0; i < n; i++) {
      cout << s3[i];
      if ((i + 1) % 2 == 0 && (i + 1) != n) cout << '-';
    }
  }
  return 0;
}

### Prompt

Your task is to create a cpp solution to the following problem:

Phone number in Berland is a sequence of n digits. Often, to make it easier to memorize the number, it is divided into groups of two or three digits. For example, the phone number 1198733 is easier to remember as 11-987-33. Your task is to find for a given phone number any of its divisions into groups of two or three digits.

Input

The first line contains integer n (2 ≤ n ≤ 100) — amount of digits in the phone number. The second line contains n digits — the phone number to divide into groups.

Output

Output any of divisions of the given phone number into groups of two or three digits. Separate groups by single character -. If the answer is not unique, output any.

Examples

Input

6
549871


Output

54-98-71

Input

7
1198733


Output

11-987-33

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
long long int l1[200005], l2[200005], vis[200005], s = 0, m;
long long int dx[] = {1, 0, -1, 0};
long long int dy[] = {0, -1, 0, 1};
vector<pair<long long int, long long int>> p2;
char s2[100005];
int tree[100005 * 4];
void STB(int at, int L, int R) {
  if (L == R) {
    tree[at] = (s2[L - 1] - '0');
    return;
  }
  int mid = (L + R) / 2;
  STB(2 * at, L, mid);
  STB(2 * at + 1, mid + 1, R);
}
void update(int at, int L, int R, int pos1, int pos2) {
  if (L > pos2 || R < pos1) return;
  if (L >= pos1 && R <= pos2) {
    tree[at] ^= 1;
    return;
  }
  int mid = (L + R) >> 1;
  update((at << 1), L, mid, pos1, pos2);
  update((at << 1) + 1, mid + 1, R, pos1, pos2);
}
int query(int at, int L, int R, int l) {
  if (L == R) return tree[at];
  if (L > l && l > R) return 0;
  int mid = (L + R) >> 1;
  if (l <= mid)
    return tree[at] ^ query((at << 1), L, mid, l);
  else
    return tree[at] ^ query((at << 1) + 1, mid + 1, R, l);
}
bool revp(const pair<long long int, long long int>& a,
          const pair<long long int, long long int>& b) {
  if (a.first != b.first)
    return a.first > b.first;
  else
    return a.second < b.second;
}
bool revp2(const pair<long long int, long long int>& a,
           const pair<long long int, long long int>& b) {
  return a.second < b.second;
}
long long int ones(long long int n) {
  long long int s = 0;
  while (n > 0) {
    if (n & 1) s++;
    n = n >> 1;
  }
  return s;
}
int main() {
  long long int t, i, x, q, n, c, m, k, l,
      cases = 0, d, p, nl, np, a, e = 1, b, x2 = -1, x1 = 1000000005, x3 = 0,
      x4 = 0, x5 = 0, x6 = 0, x7 = 0, x8 = 0;
  double x10 = 100000, x14, x15, x16, x17, x18;
  char x11, y1, y2, y3;
  int x12 = 0;
  string s3, s4, s5, s6, s7, s8;
  queue<long long int> q2;
  vector<long long int> vp;
  set<long long int> y4;
  map<long long int, long long int> m2;
  cin >> t;
  cin >> s3;
  n = s3.size();
  if (n & 1) {
    for (int i = 0; i < n; i++) {
      cout << s3[i];
      if ((i + 1) == (n - 3))
        cout << '-';
      else if ((i + 1) % 2 == 0 && (i + 1) < n - 3)
        cout << '-';
    }
  } else {
    for (int i = 0; i < n; i++) {
      cout << s3[i];
      if ((i + 1) % 2 == 0 && (i + 1) != n) cout << '-';
    }
  }
  return 0;
}

```