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
import java.io.*;
import java.util.*;
import java.math.*;

public class Codeforces
{
  private StreamTokenizer st;
  public PrintWriter pw;
  public static final int modulo = 1000000009; 
  
  void init(String in, String out) 
  {
    if (in.isEmpty())
      st = new StreamTokenizer(System.in);
    else
    {
      try
      {
        st = new StreamTokenizer(new BufferedReader(new FileReader(in)));
      }
      catch(FileNotFoundException e)
      {
        
      }
    }
    
    if (out.isEmpty())
      pw = new PrintWriter(System.out);
    else
    {
      try
      {
        pw = new PrintWriter(new FileWriter(out));
      }
      catch(IOException e)
      {
        
      }
    }
  }
  
  private void close()
  {
    pw.close();
  }
  
  private int nI()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return (int)st.nval;
  }
  
  private double nD()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return st.nval;
  }
  
  private String nS()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return st.sval;
  }
   
  private long nL()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return (long)st.nval;
  }

  
  public static void main(String[] aslkdjlkgja) throws IOException
  {
    Codeforces z = new Codeforces();
    z.init("", "");
    
    int k = z.nI();
    int a = z.nI();
    int b = z.nI();
    String s = z.nS();
      
    if (s.length() < a * k || s.length() > b * k)
      z.pw.print("No solution");
    else
    {
      int x = s.length() / k;
      
      String q[] = new String[k];
      if (x == b)
      {
        for (int i = 0 ; i < k; ++i)
          q[i] = s.substring(i*b, (i+1)*b);
      }
      else
      {
        int c = s.length() - k * x;
        for (int i = 0; i < c; ++i)
          q[i] = s.substring(i*(x+1), (i+1)*(x+1));
        int index = (x+1)*c;
        for (int i = c; i < k; ++i, index+=x)
          q[i] = s.substring(index, index+x);
      }
      
      for (int i = 0; i < k; ++i)
        z.pw.println(q[i]);
    }
    
   
    
    z.close();
  }
}