信息
- ID
- 138
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 8
- 已通过
- 5
- 上传者
#define mod %
#include<bits/stdc++.h>
int p=7;
using namespace std;
int a[305][305],n,m,ans[305],tot;
map<string ,int > w;
int get(int a,int b){
return (b-a+8)%p;
}
int exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,x,y);
int z=x;
x=y,y=z-(a/b)*y;
return d;
}
void init(){
w["MON"]=1;
w["TUE"]=2;
w["WED"]=3;
w["THU"]=4;
w["FRI"]=5;
w["SAT"]=6;
w["SUN"]=7;
}
void Guass(){
int w=0;
for(int i=1;i<=m;i++){
int o=0;
for(int j=w+1;j<=n;j++){
if(a[j][i]&&(!o||a[j][i]>a[o][i])){
o=j;
}
}
if(!o)continue;
++w;
for(int k=1;k<=m+1;k++)swap(a[w][k],a[o][k]);
for(int j=1;j<=n;j++){
if(j!=w&&a[j][i]){
int x=a[j][i];
for(int k=1;k<=m+1;k++)a[j][k]=(a[j][k]*a[w][i]-a[w][k]*x)%p;
}
}
}
for(int i=w+1;i<=n;i++){
a[i][m+1]%=p;
if(a[i][m+1]){
printf("Inconsistent data.\n");
return ;
}
}
if(w<m){
printf("Multiple solutions.\n");
return ;
}
for(int i=1;i<=m;i++){
int x,y,d;
d=exgcd(a[i][i],7,x,y);
x=x*a[i][m+1]/d;
if(a[i][m+1]%d){
printf("Inconsistent data.\n");
return ;
}
ans[++tot]=((x-3)%p+p)%p+3;
}
for(int i=1;i<=tot;i++)printf("%d ",ans[i]);
puts("");
return ;
}
int main(){
init();
while(~scanf("%d%d",&m,&n)&&m&&n){
tot=0;
memset(a,0,sizeof a);
string x,y;
int k;
for(int i=1;i<=n;i++){
cin>>k>>x>>y;
a[i][m+1]=get(w[x],w[y]);
for(int j=1;j<=k;j++){
int q;
scanf("%d",&q);
a[i][q]++;
a[i][q]%=p;
}
}
Guass();
}
}