Example #1
0
  public static void main(String[] args) throws IOException {
    IO io = new IO(System.in);
    int sum;

    while (true) {

      int nV = io.nextInt();
      int nE = io.nextInt();
      if (nV == 0) {
        break;
      }
      V[] vertices = new V[nV];
      E[] edges = new E[nE];

      for (int j = 0; j < nV; j++) {
        vertices[j] = new V(j);
      }

      for (int j = 0; j < nE; j++) {
        int start = io.nextInt();
        int end = io.nextInt();
        double w = io.nextDouble();
        if (end > start) {
          edges[j] = new E(vertices[start], vertices[end], w);
        } else {
          edges[j] = new E(vertices[end], vertices[start], w);
        }
      }

      ArrayList<E> result = compute(nV, edges);
      if (result.size() > 0) {
        sum = 0;
        for (int i = 0; i < result.size(); i++) {
          sum += result.get(i).w;
        }
        io.println(sum);
        String[] resultStrings = new String[result.size()];
        for (int i = 0; i < result.size(); i++) {
          resultStrings[i] = "" + result.get(i).start.name + " " + result.get(i).end.name;
        }
        Arrays.sort(resultStrings);
        for (int i = 0; i < result.size(); i++) {
          io.printf("%s\n", resultStrings[i]);
        }
      } else {
        io.println("Impossible");
      }
    }

    io.close();
  }