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


import java.io.PrintWriter;

import java.util.*;
import java.util.Arrays ; 
import java .lang.String.* ;
import java .lang.StringBuilder ;


public class Test{
    static int pos = 0 ; 
    static int  arr[] ; 
  static LinkedList l1 = new  LinkedList() ; 
static void find(int p ,char[]x,int put[],String s){
    int c= 0 ; 
    for (int i = 0; i < s.length(); i++) {
        if(x[p]==s.charAt(i)){
        c++ ; }
    }
    put[p] = c ;  
}
static int mode(int m ,int[]x ){
    int temp = 0 ; 
    for (int i = x.length-1; i >=0; i--) {
        if(x[i]<=m){
            temp= x[i] ; 
           /// break ; 
             return m-temp ; 
             
        }
    }
     return m-temp ; 
}
static int mode2(int m ,int[]x ){
    int temp = 0 ; 
    
    for (int i = x.length-1; i >=0; i--) {
        if(x[i]<=m){
            temp= x[i] ; 
           /// break ; 
             return x[i] ; 
             
        }
    }
     return 0 ; 
}
static int find(int x[],int temp){
    int j = 0 ; 
    for (int i = x.length-1; i >=0; i--) {
        if(x[i]==temp) return j+1 ; 
        j++ ; 
    }
    return -1 ; 
}
static String ch(long[]x,long b){
    for (int i = 0; i < x.length; i++) {
        if(x[i]==b)return "YES" ;
    }
    return "NO" ; 
}
static int pis(String s,char k ){
  
    for (int i = 0; i < s.length(); i++) {
        if(k==s.charAt(i) ) {
            return i ;
        } 
    }
   
    return -1 ; 
    
}
static  int fin(String s){
   int count = 0 ; 
    for (int i = 0; i < s.length(); i++) {
       if(s.charAt(i)>=65&&s.charAt(i)<=90) count++ ; 
    }
   return count ; 
}
static boolean config(int[]x ){
    for (int i = 0; i < x.length; i++) {
        if(x[i]==0) return false ;
    }
    return true  ; 
}
static long count(long i ){
    if(i%2==0){
        return i ; 
    }else return i+count(i-1) ;  
}
static boolean ce(int [][]x){
    for (int i = 0; i < x.length; i++) {
        if(x[i][0]!=x[i][1]) return true ; 
    }
    
    return false ;
}
static boolean c(int[][]x,int[]y){
    int j=y.length-1 ; 
    for (int i = 0; i < x.length; i++) {
        if(x[i][1]!=y[j]) return true;
        j-- ;
    }
    return false  ; 
}
static long gcd(long a , long b){
    if(b==0) return a ; 
    else return gcd(b,a%b) ; 
    
}
static boolean prime(int n,int y){
    int count =0 ; 
    for (int i = 2; i <= Math.max(n, y); i++) {
        if(n%i==0&&y%i==0)count++ ; 
    }
    if(count>0) return false ;
    
    return true ;
}
static int getbig(int []x,int r){
    for (int i = 0; i < x.length; i++) {
        if(x[i]==r) return i ;
    }
    return -1 ; 
}
static int getsmaal(int []x,int r){
    for (int i = x.length-1; i >= 0; i--) {
        if(x[i]==r) return i ;
    }
    return -1 ; 
}

    public static void main(String[] args)  {

        Scanner in = new Scanner(System.in) ;
        PrintWriter pw = new PrintWriter(System.out);   
       int n =in.nextInt() ; 
       int a =in.nextInt() ; 
       int b =in.nextInt() ; 
       String s= in.next();
       int x[] =new int[2] ; 
       int mid = n/a ; 
       
       x[0]=mid; 
       x[1] = 0 ;   
       int fin =x[0]*a ; 
     
       boolean t= false ;
     //   System.out.println(fin);
        while (fin>=0) {            
          if(fin==n){
             
             t= true ; 
              break ; 
          }  
           
         
         if((n-fin)%b==0&&fin>=0){
             x[0]=fin/a;
             x[1]=(n-fin)/b;
            t= true ; 
            break ; 
         }
         fin-=a ; 
           // System.out.println("fin \t"+fin);
        }
    if(t){
        int temp =0 ; 
        int end = temp+ a ; 
        boolean y = false ; 
        System.out.println(x[0]+x[1]);
        for (int i = 0; i < x[0]; i++) {
            y= true ; 
            String v= s.substring(temp,end) ;
            System.out.println(v);  
            temp=end ; 
            end+=a ;
        }
        if(y){
        end-=a ; 
       temp= end; 
        end=temp+ b; }else{
            temp =0 ; 
         end = temp+ b ;  
        }
        
        for (int i = 0; i < x[1]; i++) {
            String v= s.substring(temp,end) ;
            System.out.println(v);  
            temp=end ; 
            end+=b ;
        }
    }else System.out.println("-1");
                pw.close();
    }
}

