```/* SI 335 Spring 2012
* Project 6
* This is a (very simple) program that generates random
* test cases (search queries) for a given graph.
* Besides the file that holds the graph, the only input
* is the number of queries to generate. These can then be
* fed into the "drive" program via standard in.
*/
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

// Returns a random integer between 0 and n-1.
int randomInt(int n);

// Prints an error message and exits ungracefully
void error (const char* msg);

int main (int argc, char** argv) {
srand(time(NULL));

// Check command-line arguments
if (argc != 3) {
cerr << "Usage: " << argv[0] << " <k> <graph_file>" << endl;
error ("Wrong number of arguments");
}

int k = atoi(argv[1]);
if (k <= 0) error ("k must be positive");

ifstream graph (argv[2]);

int n, m;
graph >> n >> m;

vector<string> cities(n);
for (int i=0; i<n; ++i)
graph >> cities[i];

graph.close();

for (int i=0; i<k; ++i) {
int u,v;
do {
u = randomInt(n);
v = randomInt(n);
} while (u == v);
cout << cities[u] << ' ' << cities[v] << ' ' << randomInt(501) << endl;
}

return 0;
}

// Returns a random integer between 0 and n-1.
int randomInt(int n) {
int r, max = RAND_MAX - ((RAND_MAX-n+1) % n);
do { r = rand(); }
while (r > max);
return (r % n);
}

// Prints an error message and exits ungracefully
void error (const char* msg) {
cerr << "ERROR:" << endl << msg << endl;
exit(1);
}
```