typedef int Matrix[maxn][maxn];
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b)
{
return a/gcd(a,b)*b;
}
int gauss(Matrix A,int n,int m)
{
int row,col;
for(row=0,col=0; row<n&&col<m; row++,col++)
{
int r=row;
for(int i=row+1; i<n; i++)
if(abs(A[i][col])>abs(A[r][col])) r=i;
if(r!=row) for(int j=0; j<=m; j++) swap(A[r][j],A[row][j]);
if(A[row][col]==0)
{
row--;
continue;
}
for(int k=row+1; k<n; k++)//消元过程
if(A[k][col])
{
int LCM=lcm(abs(A[k][col]),abs(A[row][col]));
int ra=LCM/abs(A[k][col]);
int rb=LCM/abs(A[row][col]);
if (A[k][col]*A[row][col]<0) rb=-rb;
for(int j=col; j<=m; j++)
{
A[k][j]=A[k][j]*ra-A[row][j]*rb;
}
}
}
for(int i=row; i<n; i++)//无解情况
if(A[i][m]) return -1;
if(row<m) return 0;//多解
for(int i=m-1; i>=0; i—)//回代过程
{
for(int j=i+1; j<m; j++)
{
A[i][m]-=A[j][m]*A[i][j];
}
A[i][m]/=A[i][i];
}
return 1;
}