import java.util.*; public class Perms { Vector insert(E item, int i, Vector v) { // Return a new Vector with item inserted into position i of v // But leave v untouched so it can be used again Vector newV = new Vector (v); newV.add(i, item); return newV; } public Vector > insertAll(E item, Vector v) { // Return a vector of vectors with item inserted into all possible // positions of v Vector > result = new Vector >(); for (int i=0; i<=v.size(); i++) result.add(insert(item, i, v)); return result; } public Vector > permute(Vector v) { // Produce a Vector of all the permutations of v Vector > result = new Vector >(); if (v.size() == 1) { result.add(v); } else { E missing = v.firstElement(); Vector rest = new Vector(v); rest.remove(0); for (Vector thisperm : permute(rest)) result.addAll(insertAll(missing, thisperm)); } return result; } }