public static void DFS(int r, int used, int mask, double curD) {
		if (used >= dist.length || curD > min) {
			min = Math.min(curD, min);
			return;
		} else
			for (int i = r; i < dist.length; i++)
				if ((mask & (1 << i)) == 0) {
					mask |= (1 << i);
					for (int j = i + 1; j < dist.length; j++)
						if ((mask & (1 << j)) == 0)
							DFS(i + 1, used + 2, mask | (1 << j), curD
									+ dist[i][j]);
					mask ^= (1 << i);
				}
	}