Ok, I think you are right now.
Identify procedure by labeling each string end from 1 to 200. Let's say (1,2) identifies string 1, (3,4) identifies string 2, etc, (2k-1,2k) identifies string k.
We can think of this procedure as generating a permutation over 200 elements, and pairing numbers.
Specifically, generate a random ordering of the numbers from 1 to 200,
and processing the order from left to right, pair the numbers together,
indicating which ends are tied together.
To figure out the probability that string 1 is going to end up as a self-loop, we need the probability that in the permutation, (1,2) is paired
together.
So, count the number of ways (1,2) appears together in the following manner:
First, 1 can appear in one of 200 slots. Given the location of 1, 2 has to be in the right position (only 1 possibility) for the configuration to indicate that the ends are tied together. After this, the other slots do not matter, and there are 198! ways to generate those. Then the answer is 200*198! / 200! = 1/199.
Alternatively, we can follow the process of generating a random permutation, where we first place 1 in one of 200 slots, and then place 2 in one of the remaining 199 slots, and the rest of the process can be ignored. The probability that 2 lands in the right place to indicate ends 1 and 2 are tied together is 1/199.
The same reasoning works for any other string $(2k-1,2k)$.
Best Answer
From Wikipedia ( http://en.wikipedia.org/wiki/Birthday_problem#Probability_table), a one in a million chance to collide is reached very quickly; with only 32 bits (a 4-byte integer value in most languages), 93 elements have a one in a million chance to collide. You can Base-64 encode this integer using your alphabet. With 64 bits (a "long" in most languages), the number of hashes at which there's a one-in-a-million chance increases to 6.1 million.