diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e96534fb27b68192f27f985d3879e173ec77adb8
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/src/main/java/Algorithm/parMCE/perVertexParMCE_Total.java b/src/main/java/Algorithm/parMCE/perVertexParMCE_Total.java
index 11fdbefad844929e940406bc79271e874e1a284d..122b199d9f8a14d20d98d5c87034583ce5b5a4e0 100644
--- a/src/main/java/Algorithm/parMCE/perVertexParMCE_Total.java
+++ b/src/main/java/Algorithm/parMCE/perVertexParMCE_Total.java
@@ -85,55 +85,47 @@ public class perVertexParMCE_Total {
 
 	public void expand(TreeSet<Integer> K, Collection<Integer> CAND, Collection<Integer> FINI) throws IOException {
 		if (CAND.isEmpty() && FINI.isEmpty()) {
-			
-			count.incrementAndGet();
-			//if (count.get() % 100000000 == 0)
-			//	System.out.println(count.get());
 
+			count.incrementAndGet();
 			return;
 		}
+		if(CAND.isEmpty() && !FINI.isEmpty())
+			return;
 		int u = find_u(CAND, FINI);
 
 		Collection<Integer> NghOfu = Ngh(G, u);
 
-		List<Integer> Ext = new ArrayList<>();
+		Map<Integer, Integer> Ext = new HashMap<>();
 
+		int[] ExtForFini = new int[CAND.size()];
 
-		for(int w : CAND){
+		int index = 0;
+		for (int w : CAND) {
 			if (!NghOfu.contains(w)) {
-				Ext.add(w);
+				Ext.put(w, index);
+				ExtForFini[index] = w;
+				index++;
 			}
 		}
 
 		int size = Ext.size();
 
-		
 		if (size > 0) {
-			IntStream.range(0, size).parallel().forEach(i -> {
-				
-				//long start = System.currentTimeMillis();
+			Ext.keySet().parallelStream().forEach(q -> {
 
-				int q = Ext.get(i);
+				int idx = Ext.get(q);
 				TreeSet<Integer> Kq = new TreeSet<>();
 				Kq.addAll(K);
 				Kq.add(q);
 
 				Collection<Integer> NghOfq = Ngh(G, q);
 
-				HashSet<Integer> CANDq = SetOperations.intersect(CAND, NghOfq);
-				//Collection<Integer> CANDq = SetOperations.parIntersect(CAND, NghOfq);
+				Collection<Integer> CANDq = computeNewCand(CAND, NghOfq, Ext, idx);
+				Collection<Integer> FINIq = computeNewFini(FINI, NghOfq, Ext, ExtForFini, idx);
 
-				HashSet<Integer> FINIq = SetOperations.intersect(FINI, NghOfq);
-				//Collection<Integer> FINIq = SetOperations.parIntersect(FINI, NghOfq);
+				// loopoverhead += (System.currentTimeMillis() - start);
 
-				for (int j = 0; j < i; j++) {
-					int p = Ext.get(j);
-					CANDq.remove(p);
-					if (NghOfq.contains(p))
-						FINIq.add(p);
-				}
-				
-				//loopoverhead += (System.currentTimeMillis() - start);
+				// loopoverhead.addAndGet(delta);
 
 				try {
 					expand(Kq, CANDq, FINIq);
@@ -146,6 +138,59 @@ public class perVertexParMCE_Total {
 		}
 	}
 
+	private Collection<Integer> computeNewFini(Collection<Integer> fini, Collection<Integer> nghOfq,
+											   Map<Integer, Integer> ext, int[] extforfini, int idx) {
+
+		Collection<Integer> R = new HashSet<>();
+		if (2 * nghOfq.size() < fini.size() + idx) {
+			for (int w : nghOfq) {
+				if (fini.contains(w)) {
+					R.add(w);
+				}
+				if ((ext.get(w) < idx) && ext.containsKey(w))
+					R.add(w);
+			}
+		}
+		else {
+			for (int w : fini) {
+				if (nghOfq.contains(w))
+					R.add(w);
+			}
+			for(int i=0; i < idx; i++){
+				int x = extforfini[i];
+				if(nghOfq.contains(x))
+					R.add(x);
+			}
+		}
+		return R;
+	}
+
+	private Collection<Integer> computeNewCand(Collection<Integer> cand, Collection<Integer> nghOfq,
+											   Map<Integer, Integer> ext, int idx) {
+
+		Collection<Integer> R = new HashSet<>();
+		if (cand.size() > nghOfq.size()) {
+			for (int w : nghOfq) {
+				if (cand.contains(w)) {
+					if (ext.containsKey(w) && (ext.get(w) > idx))
+						R.add(w);
+					if (!ext.containsKey(w))
+						R.add(w);
+				}
+			}
+		} else {
+			for (int w : cand) {
+				if (nghOfq.contains(w)) {
+					if (ext.containsKey(w) && (ext.get(w) > idx))
+						R.add(w);
+					if (!ext.containsKey(w))
+						R.add(w);
+				}
+			}
+		}
+		return R;
+	}
+
 	/*
 	 * public Set<Integer> Ngh(int u) { return G.AdjList.get(u); }
 	 */
diff --git a/src/main/java/Algorithm/parMCE/perVertexParTTT_Total.java b/src/main/java/Algorithm/parMCE/perVertexParTTT_Total.java
index db5b64271afb04a02e07096e09b5a0d1e8b079cf..7de266da4b73ce6eb73df91a7064b561e263670d 100644
--- a/src/main/java/Algorithm/parMCE/perVertexParTTT_Total.java
+++ b/src/main/java/Algorithm/parMCE/perVertexParTTT_Total.java
@@ -68,15 +68,12 @@ public class perVertexParTTT_Total {
 				e.printStackTrace();
 			}
 		});
-		
 	}
 
 	public void expand(TreeSet<Integer> K, Collection<Integer> CAND, Collection<Integer> FINI) throws IOException {
 		if (CAND.isEmpty() && FINI.isEmpty()) {
-			
-			count.incrementAndGet();
-		
 
+			count.incrementAndGet();
 			return;
 		}
 		if(CAND.isEmpty() && !FINI.isEmpty())
@@ -84,44 +81,38 @@ public class perVertexParTTT_Total {
 		int u = find_u(CAND, FINI);
 
 		Collection<Integer> NghOfu = Ngh(G, u);
-		//List<Integer> Ext = new ArrayList<>();
-		
-		
-		
-		int[] Ext = new int[CAND.size()];
 
+		Map<Integer, Integer> Ext = new HashMap<>();
+
+		int[] ExtForFini = new int[CAND.size()];
 
 		int index = 0;
-		for(int w : CAND){
+		for (int w : CAND) {
 			if (!NghOfu.contains(w)) {
-				Ext[index++] = w;
+				Ext.put(w, index);
+				ExtForFini[index] = w;
+				index++;
 			}
 		}
 
-		int size = index;
+		int size = Ext.size();
 
-		
 		if (size > 0) {
-			IntStream.range(0, size).parallel().forEach(i -> {
+			Ext.keySet().parallelStream().forEach(q -> {
 
-				int q = Ext[i];
+				int idx = Ext.get(q);
 				TreeSet<Integer> Kq = new TreeSet<>();
 				Kq.addAll(K);
 				Kq.add(q);
 
 				Collection<Integer> NghOfq = Ngh(G, q);
 
-				HashSet<Integer> CANDq = SetOperations.intersect(CAND, NghOfq);
-				
+				Collection<Integer> CANDq = computeNewCand(CAND, NghOfq, Ext, idx);
+				Collection<Integer> FINIq = computeNewFini(FINI, NghOfq, Ext, ExtForFini, idx);
 
-				HashSet<Integer> FINIq = SetOperations.intersect(FINI, NghOfq);
+				// loopoverhead += (System.currentTimeMillis() - start);
 
-				for (int j = 0; j < i; j++) {
-					int p = Ext[j];
-					CANDq.remove(p);
-					if (NghOfq.contains(p))
-						FINIq.add(p);
-				}
+				// loopoverhead.addAndGet(delta);
 
 				try {
 					expand(Kq, CANDq, FINIq);
@@ -134,6 +125,58 @@ public class perVertexParTTT_Total {
 		}
 	}
 
+	private Collection<Integer> computeNewFini(Collection<Integer> fini, Collection<Integer> nghOfq,
+											   Map<Integer, Integer> ext, int[] extforfini, int idx) {
+
+		Collection<Integer> R = new HashSet<>();
+		if (2 * nghOfq.size() < fini.size() + idx) {
+			for (int w : nghOfq) {
+				if (fini.contains(w)) {
+					R.add(w);
+				}
+				if ((ext.get(w) < idx) && ext.containsKey(w))
+					R.add(w);
+			}
+		}
+		else {
+			for (int w : fini) {
+				if (nghOfq.contains(w))
+					R.add(w);
+			}
+			for(int i=0; i < idx; i++){
+				int x = extforfini[i];
+				if(nghOfq.contains(x))
+					R.add(x);
+			}
+		}
+		return R;
+	}
+
+	private Collection<Integer> computeNewCand(Collection<Integer> cand, Collection<Integer> nghOfq,
+											   Map<Integer, Integer> ext, int idx) {
+
+		Collection<Integer> R = new HashSet<>();
+		if (cand.size() > nghOfq.size()) {
+			for (int w : nghOfq) {
+				if (cand.contains(w)) {
+					if (ext.containsKey(w) && (ext.get(w) > idx))
+						R.add(w);
+					if (!ext.containsKey(w))
+						R.add(w);
+				}
+			}
+		} else {
+			for (int w : cand) {
+				if (nghOfq.contains(w)) {
+					if (ext.containsKey(w) && (ext.get(w) > idx))
+						R.add(w);
+					if (!ext.containsKey(w))
+						R.add(w);
+				}
+			}
+		}
+		return R;
+	}
 
 	public Collection<Integer> Ngh(Graph G, int u) {