#include <petscmat.h>
int main(int argc, char *argv[])
{
  PetscErrorCode ierr;
  Mat A;
  IS rperm,cperm;
  const PetscInt nnz[] = {1,1,2}; /* It works if nnz is bigger */

  PetscInitialize(&argc,&argv,0,0);
  ierr = MatCreateSeqAIJ(PETSC_COMM_WORLD,3,3,0,nnz,&A);CHKERRQ(ierr);
  ierr = MatSetValue(A,0,2,1.0,INSERT_VALUES);CHKERRQ(ierr);
  ierr = MatSetValue(A,1,2,1.0,INSERT_VALUES);CHKERRQ(ierr);
  ierr = MatSetValue(A,2,0,1.0,INSERT_VALUES);CHKERRQ(ierr);
  ierr = MatSetValue(A,2,1,1.0,INSERT_VALUES);CHKERRQ(ierr);
  ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
  ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
  ierr = MatGetOrdering(A,MATORDERINGRCM,&rperm,&cperm);CHKERRQ(ierr);
  ierr = ISView(rperm,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
  ierr = ISView(cperm,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
  ierr = MatDestroy(&A);CHKERRQ(ierr);
  ierr = ISDestroy(&rperm);CHKERRQ(ierr);
  ierr = ISDestroy(&cperm);CHKERRQ(ierr);
  PetscFinalize();
  return 0;
}
