Anfisa the monkey learns to type. She is yet unfamiliar with the "space" key and can only type in lower-case Latin letters. Having typed for a fairly long line, Anfisa understood that it would be great to divide what she has written into k lines not shorter than a and not longer than b, for the text to resemble human speech more. Help Anfisa.

Input

The first line contains three integers k, a and b (1 ≤ k ≤ 200, 1 ≤ a ≤ b ≤ 200). The second line contains a sequence of lowercase Latin letters — the text typed by Anfisa. It is guaranteed that the given line is not empty and its length does not exceed 200 symbols.

Output

Print k lines, each of which contains no less than a and no more than b symbols — Anfisa's text divided into lines. It is not allowed to perform any changes in the text, such as: deleting or adding symbols, changing their order, etc. If the solution is not unique, print any of them. If there is no solution, print "No solution" (without quotes). 

Examples

Input

3 2 5
abrakadabra


Output

ab
rakad
abra


Input

4 1 2
abrakadabra


Output

No solution
#include <bits/stdc++.h>
using namespace std;
int k, a, b;
string str;
queue<int> intervali[256];
inline int search() {
  for (int i = 0; i < 256; ++i)
    if (intervali[i].size() < b) return i;
}
int main() {
  scanf("%d%d%d", &k, &a, &b);
  cin >> str;
  int tr_inter = 0;
  int slobodan_inter = 0;
  int uzeo = 0;
  int i, j;
  bool mog = 1;
  for (i = 0; i < str.size();) {
    if (tr_inter >= k) break;
    if ((i + a) - 1 >= str.size()) break;
    for (j = 0; j < a; ++j) intervali[tr_inter].push(i + j);
    ++tr_inter;
    i += a;
    uzeo += a;
  }
  while (uzeo < str.size()) {
    slobodan_inter = search();
    if (slobodan_inter >= tr_inter - 1) {
      tr_inter = slobodan_inter + 1;
      intervali[slobodan_inter].push(uzeo++);
      continue;
    } else
      intervali[slobodan_inter].push(intervali[slobodan_inter + 1].front());
    for (i = slobodan_inter + 1; i < tr_inter - 1; ++i) {
      intervali[i].pop();
      intervali[i].push(intervali[i + 1].front());
    }
    intervali[i].pop();
    intervali[i].push(uzeo);
    ++uzeo;
  }
  if (tr_inter > k || intervali[tr_inter - 1].size() < a || tr_inter < k ||
      intervali[tr_inter - 1].size() > b) {
    printf("No solution\n");
    return 0;
  }
  for (i = 0; i < k; ++i) {
    while (!intervali[i].empty()) {
      printf("%c", str[intervali[i].front()]);
      intervali[i].pop();
    }
    printf("\n");
  }
  cin.get();
  cin.get();
  return 0;
}
