
program domino;
var n,m,p,te,i,j:longint;
a:array[1..1000,1..2] of longint;
f:array[0..10000,0..32] of longint; procedure dot(k,x,y:longint);
begin
if k>m then exit;
if k=m then
begin
inc(te);
a[te,1]:=x; a[te,2]:=y;
exit;
end;
dot(k+2,x shl 2,y shl 2);
dot(k+1,x shl 1,(y shl 1)or 1);
dot(k+1,(x shl 1)or 1,y shl 1);
end; begin
assign(input,'domino.in');reset(input);
assign(output,'domino.out');rewrite(output);
readln(n,m,p);
te:=0;
dot(0,0,0);
f[0,0]:=1;
for i:=1 to n do
for j:=1 to te do
f[i,a[j,2]]:=(f[i,a[j,2]]+f[i-1,a[j,1]]) mod p;
writeln(f[n,0] mod p);
close(input);close(output);
end.
var n,m,p,te,i,j:longint;
a:array[1..1000,1..2] of longint;
f:array[0..10000,0..32] of longint; procedure dot(k,x,y:longint);
begin
if k>m then exit;
if k=m then
begin
inc(te);
a[te,1]:=x; a[te,2]:=y;
exit;
end;
dot(k+2,x shl 2,y shl 2);
dot(k+1,x shl 1,(y shl 1)or 1);
dot(k+1,(x shl 1)or 1,y shl 1);
end; begin
assign(input,'domino.in');reset(input);
assign(output,'domino.out');rewrite(output);
readln(n,m,p);
te:=0;
dot(0,0,0);
f[0,0]:=1;
for i:=1 to n do
for j:=1 to te do
f[i,a[j,2]]:=(f[i,a[j,2]]+f[i-1,a[j,1]]) mod p;
writeln(f[n,0] mod p);
close(input);close(output);
end.
