Cod sursa(job #7335)
#include <cstdio>
#include <string>
#include <set>
using namespace std;
int n, k, aa, b, m, r;
long long nr;
char x[256];
int a[256];
int t[256];
set<int>Q;
void afis()
{
int i;
if(a[1]==0) return ;
int t=0;
//for(i=1;i<=r;i++) printf("%d", a[i]); printf("\n");
for(i=1;i<=r;i++) t=t*10, t+=a[i];
if(Q.find(t)!=Q.end()) return;
Q.insert(t);
if(t%k==0) nr++;
}
void back(int k)
{
int i;
//printf("*%d %d\n", k,r);
//for(i=1;i<=r;i++) printf("%d ", a[i]);
//printf("\n");
if(k==r+1) afis();
else
{
if(k==1)
{for(i=0;i<m;i++)
{
a[k]=x[i];
t[k]=i;
back(k+1);
}}
else
for(i=t[k-1]+1;i<m;i++)
{
a[k]=x[i];
t[k]=i;
back(k+1);
}
}
}
int main()
{
freopen("diviz.in", "r", stdin);
scanf("%d %d %d\n", &k, &aa, &b);
gets(x);
m=strlen(x);
for(int i=0;i<m;i++) x[i]-='0';
for(int i=aa;i<=b;i++) { r=i; back(1);}
freopen("diviz.out", "w", stdout);
printf("%lld\n", nr%30103);
return 0;
}