按照题目提示，构造矩阵，用矩阵快速幂求解

构造矩阵：

$f[i]=f[i-1]+f[i-2]$
$$\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix} \times \begin{bmatrix} f[i-1] \\ f[i-2] \end{bmatrix} = \begin{bmatrix} f[i] \\ f[i-1] \end{bmatrix}$$

$$\begin{bmatrix} (i-1)^2\\ (i-1)\\ 1 \end{bmatrix} \times \begin{bmatrix} 1 & 0 & 1\\ 2 & 1 & 1\\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} i^2\\ i\\ 1 \end{bmatrix}$$

$$\begin{bmatrix} \begin{smallmatrix} p & 1 & 1 & q & 0 & 0 & 0 & 0 & t & 0 & r & 1\\ 1 & u & 1 & 0 & v & 0 & 1 & 0 & 0 & 0 & 0 & 0\\ 1 & 1 & x & 0 & 0 & y & 0 & 1 & 0 & 1 & 0 & 0\\ 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & w & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & z & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 1\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 2 & 1 & -3\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \end{smallmatrix} \end{bmatrix}\times \begin{bmatrix} \begin{smallmatrix} a[i-1]\\ b[i-1]\\ c[i-1]\\ a[i-2]\\ b[i-2]\\ c[i-2]\\ w^{i-2}\\ z^{i-2}\\ i-2\\ i\\ (i-2)^2\\ 1 \end{smallmatrix} \end{bmatrix}= \begin{bmatrix} \begin{smallmatrix} a[i]\\ b[i]\\ c[i]\\ a[i-1]\\ b[i-1]\\ c[i-1]\\ w^{i-1}\\ z^{i-1}\\ i-1\\ i+1\\ (i-1)^2\\ 1 \end{smallmatrix} \end{bmatrix}$$

代码实现：

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>

#define reg register

using namespace std;

typedef long long ll;
typedef struct mat_t
{
ll x[13][13];
void out()
{
for(int i=1;i<=12;i++)
{
for(int j=1;j<=12;j++)cout<<x[i][j]<<" ";
cout<<endl;
}
}
}mat;

ll mod,n;
ll p,q,r,t,u,v,w,x,y,z;
inline ll mul(ll a,ll b)//O(1) 快速乘
{
ll d=(ll)floor(a*(double)b/mod+0.5);
ll ret=a*b-d*mod;
if(ret<0)ret+=mod;
return ret;
}

mat mul_mat(mat a,mat b)
{
ll t;
mat c;
memset(c.x,0,sizeof(c.x));
for(int i=1;i<=12;i++)
for(int j=1;j<=12;j++)
{
for(int k=1;k<=12;k++)
c.x[i][j]+=mul(a.x[i][k],b.x[k][j]);
c.x[i][j]>mod?c.x[i][j]%=mod:1;
}
return c;
}

mat ksm_mat(mat a,ll t)
{
mat ans,now=a;
memset(ans.x,0,sizeof(ans.x));
for(int i=1;i<=12;i++)ans.x[i][i]=1;
while(t)
{
if(t&1LL)ans=mul_mat(ans,now);
now=mul_mat(now,now);
t>>=1LL;
}
return ans;
}

void work()
{
mat a,b,ans;
memset(a.x,0,sizeof(a.x));
memset(b.x,0,sizeof(b.x));
a.x[1][1]=p,a.x[1][2]=a.x[1][3]=1,a.x[1][4]=q,a.x[1][9]=t,a.x[1][11]=r,a.x[1][12]=1;
a.x[2][1]=1,a.x[2][2]=u,a.x[2][3]=1,a.x[2][5]=v,a.x[2][7]=1;
a.x[3][1]=a.x[3][2]=1,a.x[3][3]=x,a.x[3][6]=y,a.x[3][8]=1,a.x[3][10]=1;
a.x[4][1]=1;
a.x[5][2]=1;
a.x[6][3]=1;
a.x[7][7]=w;
a.x[8][8]=z;
a.x[9][9]=1,a.x[9][12]=1;
a.x[10][10]=1,a.x[10][12]=1;
a.x[11][10]=2,a.x[11][11]=1,a.x[11][12]=mod-3;
a.x[12][12]=1;
b.x[1][1]=b.x[2][1]=b.x[3][1]=3;
b.x[4][1]=b.x[5][1]=b.x[6][1]=1;
b.x[7][1]=w;
b.x[8][1]=z;
b.x[9][1]=1;
b.x[10][1]=3;
b.x[11][1]=b.x[12][1]=1;
a=ksm_mat(a,n-2);
ans=mul_mat(a,b);
printf("nodgd %lld\nCiocio %lld\nNicole %lld\n",ans.x[1][1],ans.x[2][1],ans.x[3][1]);
}

void input()
{
scanf("%lld%lld",&n,&mod);
scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld%lld",&p,&q,&r,&t,&u,&v,&w,&x,&y,&z);
}

int main()
{
input();
work();
return 0;
}