diff --git a/main.cpp b/main.cpp
index c3cce31f0c4aa57468f5ef3f9e86a3ea4d11db4e..6310b53e4b2c5d3c0c2f791543a7a90c77eccd09 100644
--- a/main.cpp
+++ b/main.cpp
@@ -21,13 +21,25 @@ int main(int argc, char ** argv)
 	assert(argc>=3);
 	std::uniform_int_distribution<unsigned int> dist(0, 1000000000);
 	std::random_device urandom("/dev/urandom");
-	int seed = argv[2][0]?atoi(argv[2]):dist(urandom);
-	srand(seed);
+
 	int n = atoi(argv[1]);
 	vector<int> in(2*n);
-	fo(i,n) in[i] = i;
-	fo(i,n) in[n+i] = i;
-	random_shuffle(in.begin(), in.end());
+	int seed = 0;
+
+	if('A' <= argv[2][0] and argv[2][0] <= 'Z')
+	{
+		assert(strlen(argv[2]) == 2*n);
+		fo(i, 2*n)
+			in[i] = argv[2][i] - 'A';
+	}
+	else
+	{
+		seed = argv[2][0]?atoi(argv[2]):dist(urandom);
+		srand(seed);
+		fo(i,n) in[i] = i;
+		fo(i,n) in[n+i] = i;
+		random_shuffle(in.begin(), in.end());
+	}
 
 	fflush(stdout);
 	int old_stdout = dup(1);