class Element { T x; int array_Pos; Element Parent=this; Element [] group=new Element[20]; int count; // Создаёт новый элемент со значением x public Element(T x) { this.x=x; Element Parent=this; int coint=0; } // Возвращает значение элемента public T x() { return x; } // Определяет, принадлежит ли текущий элемент // тому же множеству, что и элемент elem public boolean equivalent(Element elem) { Element el1=this; Element el2=elem; while(el1.Parent!=el1) el1=el1.Parent; while(el2.Parent!=el2) el2=el2.Parent; if(el1==el2) { return true; } else { return false; } } // Объединяет множество, которому принадлежит текущий // элемент, с множеством, которому принадлежит // элемент elem public void union(Element elem) { int i=0; Element el1=this; Element el2=elem; while(el1.Parent!=el1) el1=el1.Parent; while(el2.Parent!=el2) el2=el2.Parent; if(el1==el2) return; else { for(i=0;i