# 计数

2 10

90

## 题解

Fi$F_i$表示当前1$1$~~i$i$位已经算好时，有Fi$F_i$个数满足题目条件，且第i$i$位不为0。

## Code(Pascal)

const
mo=100000000;
var
f:array[-1..2000,0..5000] of int64;
n,k,j,i,o,l:longint;
p:int64;
function max(a,b:longint):longint;
begin
if a>b then exit(a)
else exit(b);
end;
procedure lj(o:longint);
var
i:longint;
jw:int64;
begin
jw:=0;
f[o,0]:=max(f[o-1,0],f[o-2,0]);
for i:=1 to f[o,0] do
begin
f[o,i]:=f[o-1,i]+f[o-2,i]+jw;
jW:=f[o,i] div mo;
f[o,i]:=f[o,i] mod mo;
end;
while jw>0 do
begin
inc(f[o,0]);
f[o,f[o,0]]:=jw mod mo;
jw:=jw div mo;
end;
end;
procedure cf(o:longint);
var
i:longint;
jw:int64;
begin
jw:=0;
for i:=1 to f[o,0] do
begin
f[o,i]:=f[o,i]*(k-1)+jw;
jw:=f[o,i] div mo;
f[o,i]:=f[o,i] mod mo;
end;
while jw>0 do
begin
inc(f[o,0]);
f[o,f[o,0]]:=jw mod mo;
jw:=jw div mo;
end;
end;
begin
f[0,0]:=1;
f[0,1]:=1;
f[1,0]:=1;
f[1,1]:=k-1;
for i:=2 to n do
begin
lj(i);
cf(i);
end;
write(f[n,f[n,0]]);
for i:=f[n,0]-1 downto 1 do
begin
p:=f[n,i];
o:=0;
while p>0 do
begin
inc(o);
p:=p div 10;
end;
for l:=1 to 8-o do
write(0);
write(f[n,i]);
end;
end.