You are given the string s of length n and the numbers p, q. Split the string s to pieces of length p and q.

For example, the string "Hello" for p = 2, q = 3 can be split to the two strings "Hel" and "lo" or to the two strings "He" and "llo".

Note it is allowed to split the string s to the strings only of length p or to the strings only of length q (see the second sample test).

Input

The first line contains three positive integers n, p, q (1 ≤ p, q ≤ n ≤ 100).

The second line contains the string s consists of lowercase and uppercase latin letters and digits.

Output

If it's impossible to split the string s to the strings of length p and q print the only number "-1".

Otherwise in the first line print integer k — the number of strings in partition of s.

Each of the next k lines should contain the strings in partition. Each string should be of the length p or q. The string should be in order of their appearing in string s — from left to right.

If there are several solutions print any of them.

Examples

Input

5 2 3
Hello


Output

2
He
llo


Input

10 9 5
Codeforces


Output

2
Codef
orces


Input

6 4 5
Privet


Output

-1


Input

8 1 1
abacabac


Output

8
a
b
a
c
a
b
a
c
#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T a, T b) {
  return (b != 0 ? gcd(b, a % b) : a);
}
template <typename T>
T lcm(T a, T b) {
  return (a / gcd(a, b) * b);
}
template <typename T>
T BigMod(T b, T p, T m) {
  if (p == 0) return 1;
  if (p % 2 == 0) {
    long long s = BigMod(b, p / 2, m) % m;
    return (s * s) % m;
  }
  long long sm = ((b % m) * (BigMod(b, p - 1, m) % m)) % m;
  return sm;
}
template <typename T>
T ModInv(T b, T m) {
  return BigMod(b, m - 2, m);
}
template <typename T>
T POW(T B, T P) {
  if (P == 0) return 1;
  if (P & 1)
    return B * POW(B, P - 1);
  else
    return (POW(B, P / 2) * POW(B, P / 2));
}
template <typename T>
T Swap(T &a, T &b) {
  T tmp = a;
  a = b;
  b = tmp;
}
int Set(int N, int pos) { return N = N | (1 << pos); }
int Reset(int N, int pos) { return N = N & ~(1 << pos); }
bool Check(int N, int pos) { return (bool)(N & (1 << pos)); }
double DEG(double x) { return (180.0 * x) / (2.0 * acos(0.0)); }
double RAD(double x) { return (x * (double)2.0 * acos(0.0)) / (180.0); }
int toInt(string s) {
  int sm;
  stringstream ss(s);
  ss >> sm;
  return sm;
}
template <class T>
inline bool readfast(T &x) {
  int c = getchar();
  int sgn = 1;
  while (~c && c < '0' || c > '9') {
    if (c == '-') sgn = -1;
    c = getchar();
  }
  for (x = 0; ~c && '0' <= c && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  x *= sgn;
  return ~c;
}
int R[] = {1, -1, 0, 0, 1, -1, -1, 1};
int C[] = {0, 0, 1, -1, 1, -1, 1, -1};
int KR[] = {-2, -2, -1, 1, 2, 2, -1, 1};
int KC[] = {1, -1, 2, 2, 1, -1, -2, -2};
struct P {
  double x, y;
  P(double x = 0.0, double y = 0.0) {
    this->x = x;
    this->y = y;
  }
};
P mkv(P ae, P be) { return P(be.x - ae.x, be.y - ae.y); }
double dtp(P ae, P be) { return (ae.x * be.x + ae.y * be.y); }
double crp(P ae, P be) { return (ae.x * be.y - ae.y * be.x); }
double val(P ae) { return sqrt(dtp(ae, ae)); }
P vresize(P ae, double llen) {
  double v = val(ae);
  return P(ae.x * llen / v, ae.y * llen / v);
}
double ART(P ae, P be) { return crp(ae, be) / 2.0; }
P rot(P ae, double ang) {
  return P(ae.x * cos(ang) - ae.y * sin(ang),
           ae.y * cos(ang) + ae.x * sin(ang));
}
struct st {
  long long a, b, c, idx;
  st(long long a, long long b, long long c, long long idx) {
    this->a = a;
    this->b = b;
    this->c = c;
    this->idx = idx;
  }
};
vector<st> V;
bool cmp(st a, st b) {
  if (a.a == b.a) {
    if (a.b == b.b)
      return a.c < b.c;
    else
      return a.b < b.b;
  } else
    return a.a < b.a;
}
int main() {
  string x, y;
  int n, p, q, pd, qd, r, op, oq, u, l, i, j;
  cin >> n >> op >> oq >> x;
  p = min(op, oq);
  q = max(op, oq);
  pd = n / p;
  qd = 0;
  r = n % p;
  if (r) {
    while (pd--) {
      r += p;
      if (r % q == 0) {
        qd = r / q;
        break;
      }
    }
  }
  if (pd == -1) {
    printf("-1\n");
    return 0;
  }
  l = 0;
  printf("%d\n", pd + qd);
  for (i = 1; i <= pd; i++) {
    y = "";
    u = i * p;
    for (j = l; j <= u - 1; j++) {
      y += x[j];
    }
    cout << y << endl;
    l = u;
  }
  for (i = 1; i <= qd; i++) {
    y = "";
    u = l + q;
    for (j = l; j <= u - 1; j++) {
      y += x[j];
    }
    cout << y << endl;
    l = u;
  }
  return 0;
}
