Print all Hamiltonian Cycles in an Undirected Graph

  import java.util.ArrayList;class GFG {                  boolean isSafe(int v, int graph[][],                   ArrayList path,                   int pos)    {                                if (graph[path.get(pos – 1)][v]            == 0)            return false;                          for (int i = 0; i < pos; i++)            if (path.get(i) == v)                return false;                          return true;    }              boolean hasCycle;              void hamCycle(int graph[][])    {                        hasCycle = false;                  ArrayList path            = new ArrayList();        path.add(0);                          boolean[] visited            = new boolean[graph.length];          for (int i = 0;             i < visited.length; i++)            visited[i] = false;          visited[0] = true;                          FindHamCycle(graph, 1, path,                     visited);          if (!hasCycle) {                                                  System.out.println(                "No Hamiltonian Cycle"                + "possible ");            return;        }    }              void FindHamCycle(int graph[][], int pos,                      ArrayList path,                      boolean[] visited)    {                        if (pos == graph.length) {                                                  if (graph[path.get(path.size() - 1)]                     [path.get(0)]                != 0) {                                                                  path.add(0);                for (int i = 0;                     i < path.size(); i++) {                    System.out.print(                        path.get(i) + " ");                }                System.out.println();                                                  path.remove(path.size() - 1);                                                  hasCycle = true;            }            return;        }                          for (int v = 0;             v < graph.length; v++) {                                      if (isSafe(v, graph, path, pos)                && !visited[v]) {                  path.add(v);                visited[v] = true;                                                  FindHamCycle(                    graph, pos + 1,                    path, visited);                                                                  visited[v] = false;                path.remove(                    path.size() - 1);            }        }    }          public static void main(String args[])    {        GFG hamiltonian = new GFG();                                                                                          int[][] graph = {            { 0, 1, 1, 0, 0, 1 },            { 1, 0, 1, 0, 1, 1 },            { 1, 1, 0, 1, 0, 0 },            { 0, 0, 1, 0, 1, 0 },            { 0, 1, 0, 1, 0, 1 },            { 1, 1, 0, 0, 1, 0 },        };        hamiltonian.hamCycle(graph);    }}