#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int n,m,p;
int map[74][74];
int find(int s,int t){
s=(s%p+p)%p;
t=(t%p+p)%p;
for(int i=0;i<p;i++)
if((i*t)%p==s)
return i;
}
void solve(){
int i,j,k,s,t,a,b;
j=0;
for(i=0;i<n&&j<m;i++,j++)
{
s=0;t=0;
for(k=i;k<n;k++)
if(s<abs(map[k][j]))
{
s=abs(map[k][j]);
t=k;
}
if(s==0)
{
i--;
continue;
}
if(t!=i)
for(k=j;k<=m;k++)
swap(map[t][k],map[i][k]);
a=map[i][j];
for(k=i+1;k<n;k++)
{
b=map[k][j];
if(b!=0)
{
for(s=j;s<=m;s++)
map[k][s]=(map[k][s]*a-map[i][s]*b)%p;
}
}
}
for(i=n-1;i>=0;i--)
{
k=0;
for(j=i+1;j<m;j++)
k=(k+map[i][j]*map[j][m])%p;
map[i][m]=find(map[i][m]-k,map[i][i]);
}
for(i=0;i<n;i++)
cout<<map[i][n]<<' ';
cout<<endl;
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
int cas;
cin>>cas;
char c[100];
while(cas--)
{
cin>>p>>c;
m=n=strlen(c);
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
if(c[i]!='*')
map[i][n]=(c[i]-'a'+1)%p;
else
map[i][n]=0;
}
for(i=0;i<n;i++)
{
k=1;
for(j=0;j<n;j++)
{
map[i][j]=k;
k=(k*(i+1))%p;
}
}
solve();
}
}
int main(){
read();
return 0;
}
转载于:https://www.cnblogs.com/zhaozhe/archive/2011/06/02/2067778.html