function x=invi(A)

[n,n]=size(A);
x=zeros(n,n);
c=zeros(n,1);
b=eye(n);
for i=1:n
    [p,q]=maxi(A,i);
    m=A(i,:);
    A(i,:)=A(p,:);
    A(p,:)=m;
    m=b(i,:);
    b(i,:)=b(p,:);
    b(p,:)=m;
    c(i)=q;
    m=A(:,q);
    A(:,q)=A(:,i);
    A(:,i)=m;
    for j=i+1:n
        t=A(j,i)/A(i,i);
        A(j,:)=A(j,:)-t*A(i,:);
        b(j,:)=b(j,:)-t*b(i,:);
    end
end


x(n,:)=b(n,:)/A(n,n);

for i=n-1:-1:1
    x(i,:)=(b(i,:)-A(i,i+1:n)*x(i+1:n,:))/A(i,i);
end
    

for i=n:-1:1
    m=x(i,:);
    x(i,:)=x(c(i),:);
    x(c(i),:)=m;
end

