#include<map>#include<cstdio>usingnamespace std;
constint N = 80;
int n, mo, inv4, ans;
map <pair<int, __int128>, int> rem;
__int128 one = 1;
intadd(int x, int y){return x + y >= mo ? x + y - mo : x + y;}
intdec(int x, int y){return x < y ? x - y + mo : x - y;}
intmul(int x, int y){return1ll * x * y % mo;}
intaddex(int x, int y, int z){return x + y >= z ? x + y - z : x + y;}
intdecex(int x, int y, int z){return x < y ? x - y + z : x - y;}
intksm(int x, int y){
int re = 1;
while (y) {
if (y & 1) re = mul(re, x);
x = mul(x, x); y >>= 1;
}
return re;
}
__int128 work(int fr, __int128 s){
int a = -1, b = -1;
for (int i = addex(fr, 1, n); i != decex(fr, 1, n); i = addex(i, 1, n)) {
int j = addex(i, 1, n);
if (((s >> i) & 1) && ((s >> j) & 1)) {
if (a == -1) a = i;
b = i;
}
}
for (int i = a; i != b; i = addex(i, 1, n)) {
s |= (one << i);
}
return s;
}
intdfs(int now, __int128 s){
if ((s >> now) & 1) return0;
s |= (one << now); s = work(now, s);
if (rem[make_pair(now, s)]) return rem[make_pair(now, s)];
return rem[make_pair(now, s)] = add(1, mul(inv4, add(add(dfs(addex(now, 1, n), s), dfs(addex(now, 2, n), s)), add(dfs(decex(now, 1, n), s), dfs(decex(now, 2, n), s)))));
}
intmain(){
freopen("walk.in", "r", stdin);
freopen("walk.out", "w", stdout);
scanf("%d %d", &n, &mo); inv4 = ksm(4, mo - 2);
if (n == 1) {printf("1"); return0;}
printf("%d", dfs(0, 0));
return0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!