Well, this is what I came up with;
Assume Bill = A,
Charles = B,
Tom = C.
A says !B,
B says !C,
C says !A && !B
One important thing is the AND that C used,
If either A or B is telling the truth, C has to be lying.
Now let's make a table:
Where it says 'if A', that means
if A is telling the truth, and it lists the other results.
T means true, F means false,
X means both, which cannot happen.
|| ...||.if A.|.if B.|.if C.|
|| A || T | F | X
|| B || F | T | F
|| C || X | F | T
First Column:
A is telling the Truth.
Because A is telling the truth, B is actually lying,
Because B is lying, what C says is logically true.
BUT, C can't be telling the truth, because
C says that both A && B are lying.
Because A is not lying, what C says is acually false,
and since that does not agree with what B said,
this option is not possible.
Second Column:
B is telling the Truth.
Because B is telling the truth, what C says is logically false.
A cannot be telling the truth, because B is not lying.
C is saying that both A && B are lying, since they are not
both lying, this statement is false.
C's statement is actually false, as B has said.
This option is possible.
Third Column:
C is telling the Truth.
Because C says that A && B are lying,
both their statements are logically false.
BUT because C said A is lying, that means his statement
about B lying is false, meaning B is actually telling the truth.
This does not agree with C's supposedly true statement, so,
this option is not possible.
To keep this from getting too confusing, I'm not going to
give an explanation as to the possibilities of two people both being
telling the truth. In this situation, that is not possible.
So using the process of elimination,
Charles is telling the truth, and Bill and Tom are both lying.
Okay, maybe I've wasted just a litttle more than 10 minutes. :]