Project Gutenberg's Memoirs of Sherlock Holmes, by Sir Arthur Conan Doyle

This eBook is for the use of anyone anywhere at no cost and with
almost no restrictions whatsoever.  You may copy it, give it away or
re-use it under the terms of the Project Gutenberg License included
with this eBook or online at www.gutenberg.org


Title: Memoirs of Sherlock Holmes

Author: Sir Arthur Conan Doyle

Posting Date: July 31, 2008 [EBook #834]
Release Date: March, 1997
[This file last updated on August 16, 2010]

Language: English


*** START OF THIS PROJECT GUTENBERG EBOOK MEMOIRS OF SHERLOCK HOLMES ***




Produced by Angela M. Cable





MEMOIRS OF SHERLOCK HOLMES

by Sir Arthur Conan Doyle




Adventure I. Silver Blaze


"I am afraid, Watson, that I shall have to go," said Holmes, as we sat
down together to our breakfast one morning.

"Go! Where to?"

"To Dartmoor; to King's Pyland."

I was not surprised. Indeed, my only wonder was that he had not already
been mixed up in this extraordinary case, which was the one topic of
conversation through the length and breadth of England. For a whole day
my companion had rambled about the room with his chin upon his chest and
his brows knitted, charging and recharging his pipe with the strongest
black tobacco, and absolutely deaf to any of my questions or remarks.
Fresh editions of every paper had been sent up by our news agent, only
to be glanced over and tossed down into a corner. Yet, silent as he was,
I knew perfectly well what it was over which he was brooding. There was
but one problem before the public which could challenge his powers of
analysis, and that was the singular disappearance of the favorite for
the Wessex Cup, and the tragic murder of its trainer. When, therefore,
he suddenly announced his intention of setting out for the scene of the
drama it was only what I had both expected and hoped for.

"I should be most happy to go down with you if I should not be in the
way," said I.

"My dear Watson, you would confer a great favor upon me by coming. And
I think that your time will not be misspent, for there are points about
the case which promise to make it an absolutely unique one. We have, I
think, just time to catch our train at Paddington, and I will go further
into the matter upon our journey. You would oblige me by bringing with
you your very excellent field-glass."

And so it happened that an hour or so later I found myself in the
corner of a first-class carriage flying along en route for Exeter, while
Sherlock Holmes, with his sharp, eager face framed in his ear-flapped
travelling-cap, dipped rapidly into the bundle of fresh papers which he
had procured at Paddington. We had left Reading far behind us before
he thrust the last one of them under the seat, and offered me his
cigar-case.

"We are going well," said he, looking out the window and glancing at his
watch. "Our rate at present is fifty-three and a half miles an hour."

"I have not observed the quarter-mile posts," said I.

"Nor have I. But the telegraph posts upon this line are sixty yards
apart, and the calculation is a simple one. I presume that you
have looked into this matter of the murder of John Straker and the
disappearance of Silver Blaze?"

"I have seen what the Telegraph and the Chronicle have to say."

"It is one of those cases where the art of the reasoner should be
used rather for the sifting of details than for the acquiring of fresh
evidence. The tragedy has been so uncommon, so complete and of such
personal importance to so many people, that we are suffering from a
plethora of surmise, conjecture, and hypothesis. The difficulty is to
detach the framework of fact--of absolute undeniable fact--from the
embellishments of theorists and reporters. Then, having established
ourselves upon this sound basis, it is our duty to see what inferences
may be drawn and what are the special points upon which the whole
mystery turns. On Tuesday evening I received telegrams from both Colonel
Ross, the owner of the horse, and from Inspector Gregory, who is looking
after the case, inviting my cooperation."

"Tuesday evening!" I exclaimed. "And this is Thursday morning. Why
didn't you go down yesterday?"

"Because I made a blunder, my dear Watson--which is, I am afraid, a more
common occurrence than any one would think who only knew me through your
memoirs. The fact is that I could not believe it possible that the most
remarkable horse in England could long remain concealed, especially in
so sparsely inhabited a place as the north of Dartmoor. From hour to
hour yesterday I expected to hear that he had been found, and that
his abductor was the murderer of John Straker. When, however, another
morning had come, and I found that beyond the arrest of young Fitzroy
Simpson nothing had been done, I felt that it was time for me to take
action. Yet in some ways I feel that yesterday has not been wasted."

"You have formed a theory, then?"

"At least I have got a grip of the essential facts of the case. I shall
enumerate them to you, for nothing clears up a case so much as stating
it to another person, and I can hardly expect your co-operation if I do
not show you the position from which we start."

I lay back against the cushions, puffing at my cigar, while Holmes,
leaning forward, with his long, thin forefinger checking off the points
upon the palm of his left hand, gave me a sketch of the events which had
led to our journey.

"Silver Blaze," said he, "is from the Somomy stock, and holds as
brilliant a record as his famous ancestor. He is now in his fifth year,
and has brought in turn each of the prizes of the turf to Colonel Ross,
his fortunate owner. Up to the time of the catastrophe he was the first
favorite for the Wessex Cup, the betting being three to one on him. He
has always, however, been a prime favorite with the racing public, and
has never yet disappointed them, so that even at those odds enormous
sums of money have been laid upon him. It is obvious, therefore, that
there were many people who had the strongest interest in preventing
Silver Blaze from being there at the fall of the flag next Tuesday.

"The fact was, of course, appreciated at King's Pyland, where the
Colonel's training-stable is situated. Every precaution was taken to
guard the favorite. The trainer, John Straker, is a retired jockey
who rode in Colonel Ross's colors before he became too heavy for the
weighing-chair. He has served the Colonel for five years as jockey and
for seven as trainer, and has always shown himself to be a zealous and
honest servant. Under him were three lads; for the establishment was a
small one, containing only four horses in all. One of these lads sat up
each night in the stable, while the others slept in the loft. All three
bore excellent characters. John Straker, who is a married man, lived
in a small villa about two hundred yards from the stables. He has no
children, keeps one maid-servant, and is comfortably off. The country
round is very lonely, but about half a mile to the north there is a
small cluster of villas which have been built by a Tavistock contractor
for the use of invalids and others who may wish to enjoy the pure
Dartmoor air. Tavistock itself lies two miles to the west, while
across the moor, also about two miles distant, is the larger training
establishment of Mapleton, which belongs to Lord Backwater, and is
managed by Silas Brown. In every other direction the moor is a complete
wilderness, inhabited only by a few roaming gypsies. Such was the
general situation last Monday night when the catastrophe occurred.

"On that evening the horses had been exercised and watered as usual, and
the stables were locked up at nine o'clock. Two of the lads walked up
to the trainer's house, where they had supper in the kitchen, while the
third, Ned Hunter, remained on guard. At a few minutes after nine
the maid, Edith Baxter, carried down to the stables his supper, which
consisted of a dish of curried mutton. She took no liquid, as there was
a water-tap in the stables, and it was the rule that the lad on duty
should drink nothing else. The maid carried a lantern with her, as it
was very dark and the path ran across the open moor.

"Edith Baxter was within thirty yards of the stables, when a man
appeared out of the darkness and called to her to stop. As he stepped
into the circle of yellow light thrown by the lantern she saw that he
was a person of gentlemanly bearing, dressed in a gray suit of tweeds,
with a cloth cap. He wore gaiters, and carried a heavy stick with a knob
to it. She was most impressed, however, by the extreme pallor of his
face and by the nervousness of his manner. His age, she thought, would
be rather over thirty than under it.

"'Can you tell me where I am?' he asked. 'I had almost made up my mind
to sleep on the moor, when I saw the light of your lantern.'

"'You are close to the King's Pyland training-stables,' said she.

"'Oh, indeed! What a stroke of luck!' he cried. 'I understand that a
stable-boy sleeps there alone every night. Perhaps that is his supper
which you are carrying to him. Now I am sure that you would not be too
proud to earn the price of a new dress, would you?' He took a piece of
white paper folded up out of his waistcoat pocket. 'See that the boy
has this to-night, and you shall have the prettiest frock that money can
buy.'

"She was frightened by the earnestness of his manner, and ran past him
to the window through which she was accustomed to hand the meals. It was
already opened, and Hunter was seated at the small table inside. She had
begun to tell him of what had happened, when the stranger came up again.

"'Good-evening,' said he, looking through the window. 'I wanted to have
a word with you.' The girl has sworn that as he spoke she noticed the
corner of the little paper packet protruding from his closed hand.

"'What business have you here?' asked the lad.

"'It's business that may put something into your pocket,' said the
other. 'You've two horses in for the Wessex Cup--Silver Blaze and
Bayard. Let me have the straight tip and you won't be a loser. Is it a
fact that at the weights Bayard could give the other a hundred yards in
five furlongs, and that the stable have put their money on him?'

"'So, you're one of those damned touts!' cried the lad. 'I'll show you
how we serve them in King's Pyland.' He sprang up and rushed across the
stable to unloose the dog. The girl fled away to the house, but as she
ran she looked back and saw that the stranger was leaning through the
window. A minute later, however, when Hunter rushed out with the hound
he was gone, and though he ran all round the buildings he failed to find
any trace of him."

"One moment," I asked. "Did the stable-boy, when he ran out with the
dog, leave the door unlocked behind him?"

"Excellent, Watson, excellent!" murmured my companion. "The importance
of the point struck me so forcibly that I sent a special wire to
Dartmoor yesterday to clear the matter up. The boy locked the door
before he left it. The window, I may add, was not large enough for a man
to get through.

"Hunter waited until his fellow-grooms had returned, when he sent a
message to the trainer and told him what had occurred. Straker was
excited at hearing the account, although he does not seem to have quite
realized its true significance. It left him, however, vaguely uneasy,
and Mrs. Straker, waking at one in the morning, found that he was
dressing. In reply to her inquiries, he said that he could not sleep on
account of his anxiety about the horses, and that he intended to walk
down to the stables to see that all was well. She begged him to remain
at home, as she could hear the rain pattering against the window, but in
spite of her entreaties he pulled on his large mackintosh and left the
house.

"Mrs. Straker awoke at seven in the morning, to find that her husband
had not yet returned. She dressed herself hastily, called the maid, and
set off for the stables. The door was open; inside, huddled together
upon a chair, Hunter was sunk in a state of absolute stupor, the
favorite's stall was empty, and there were no signs of his trainer.

"The two lads who slept in the chaff-cutting loft above the harness-room
were quickly aroused. They had heard nothing during the night, for they
are both sound sleepers. Hunter was obviously under the influence of
some powerful drug, and as no sense could be got out of him, he was left
to sleep it off while the two lads and the two women ran out in search
of the absentees. They still had hopes that the trainer had for some
reason taken out the horse for early exercise, but on ascending the
knoll near the house, from which all the neighboring moors were visible,
they not only could see no signs of the missing favorite, but they
perceived something which warned them that they were in the presence of
a tragedy.

"About a quarter of a mile from the stables John Straker's overcoat was
flapping from a furze-bush. Immediately beyond there was a bowl-shaped
depression in the moor, and at the bottom of this was found the dead
body of the unfortunate trainer. His head had been shattered by a savage
blow from some heavy weapon, and he was wounded on the thigh, where
there was a long, clean cut, inflicted evidently by some very sharp
instrument. It was clear, however, that Straker had defended himself
vigorously against his assailants, for in his right hand he held a small
knife, which was clotted with blood up to the handle, while in his left
he clasped a red and black silk cravat, which was recognized by the maid
as having been worn on the preceding evening by the stranger who had
visited the stables. Hunter, on recovering from his stupor, was also
quite positive as to the ownership of the cravat. He was equally certain
that the same stranger had, while standing at the window, drugged his
curried mutton, and so deprived the stables of their watchman. As to the
missing horse, there were abundant proofs in the mud which lay at the
bottom of the fatal hollow that he had been there at the time of the
struggle. But from that morning he has disappeared, and although a large
reward has been offered, and all the gypsies of Dartmoor are on the
alert, no news has come of him. Finally, an analysis has shown that
the remains of his supper left by the stable-lad contain an appreciable
quantity of powdered opium, while the people at the house partook of the
same dish on the same night without any ill effect.

"Those are the main facts of the case, stripped of all surmise, and
stated as baldly as possible. I shall now recapitulate what the police
have done in the matter.

"Inspector Gregory, to whom the case has been committed, is an extremely
competent officer. Were he but gifted with imagination he might rise to
great heights in his profession. On his arrival he promptly found and
arrested the man upon whom suspicion naturally rested. There was little
difficulty in finding him, for he inhabited one of those villas which I
have mentioned. His name, it appears, was Fitzroy Simpson. He was a man
of excellent birth and education, who had squandered a fortune upon the
turf, and who lived now by doing a little quiet and genteel book-making
in the sporting clubs of London. An examination of his betting-book
shows that bets to the amount of five thousand pounds had been
registered by him against the favorite. On being arrested he volunteered
that statement that he had come down to Dartmoor in the hope of
getting some information about the King's Pyland horses, and also about
Desborough, the second favorite, which was in charge of Silas Brown at
the Mapleton stables. He did not attempt to deny that he had acted as
described upon the evening before, but declared that he had no sinister
designs, and had simply wished to obtain first-hand information. When
confronted with his cravat, he turned very pale, and was utterly unable
to account for its presence in the hand of the murdered man. His wet
clothing showed that he had been out in the storm of the night before,
and his stick, which was a Penang-lawyer weighted with lead, was just
such a weapon as might, by repeated blows, have inflicted the terrible
injuries to which the trainer had succumbed. On the other hand, there
was no wound upon his person, while the state of Straker's knife would
show that one at least of his assailants must bear his mark upon him.
There you have it all in a nutshell, Watson, and if you can give me any
light I shall be infinitely obliged to you."

I had listened with the greatest interest to the statement which Holmes,
with characteristic clearness, had laid before me. Though most of the
facts were familiar to me, I had not sufficiently appreciated their
relative importance, nor their connection to each other.

"Is it not possible," I suggested, "that the incised wound upon Straker
may have been caused by his own knife in the convulsive struggles which
follow any brain injury?"

"It is more than possible; it is probable," said Holmes. "In that case
one of the main points in favor of the accused disappears."

"And yet," said I, "even now I fail to understand what the theory of the
police can be."

"I am afraid that whatever theory we state has very grave objections to
it," returned my companion. "The police imagine, I take it, that this
Fitzroy Simpson, having drugged the lad, and having in some way obtained
a duplicate key, opened the stable door and took out the horse, with
the intention, apparently, of kidnapping him altogether. His bridle is
missing, so that Simpson must have put this on. Then, having left the
door open behind him, he was leading the horse away over the moor, when
he was either met or overtaken by the trainer. A row naturally ensued.
Simpson beat out the trainer's brains with his heavy stick without
receiving any injury from the small knife which Straker used in
self-defence, and then the thief either led the horse on to some secret
hiding-place, or else it may have bolted during the struggle, and be
now wandering out on the moors. That is the case as it appears to
the police, and improbable as it is, all other explanations are more
improbable still. However, I shall very quickly test the matter when I
am once upon the spot, and until then I cannot really see how we can get
much further than our present position."

It was evening before we reached the little town of Tavistock, which
lies, like the boss of a shield, in the middle of the huge circle of
Dartmoor. Two gentlemen were awaiting us in the station--the one a tall,
fair man with lion-like hair and beard and curiously penetrating light
blue eyes; the other a small, alert person, very neat and dapper, in a
frock-coat and gaiters, with trim little side-whiskers and an eye-glass.
The latter was Colonel Ross, the well-known sportsman; the other,
Inspector Gregory, a man who was rapidly making his name in the English
detective service.

"I am delighted that you have come down, Mr. Holmes," said the Colonel.
"The Inspector here has done all that could possibly be suggested, but I
wish to leave no stone unturned in trying to avenge poor Straker and in
recovering my horse."

"Have there been any fresh developments?" asked Holmes.

"I am sorry to say that we have made very little progress," said the
Inspector. "We have an open carriage outside, and as you would no doubt
like to see the place before the light fails, we might talk it over as
we drive."

A minute later we were all seated in a comfortable landau, and were
rattling through the quaint old Devonshire city. Inspector Gregory was
full of his case, and poured out a stream of remarks, while Holmes threw
in an occasional question or interjection. Colonel Ross leaned back with
his arms folded and his hat tilted over his eyes, while I listened with
interest to the dialogue of the two detectives. Gregory was formulating
his theory, which was almost exactly what Holmes had foretold in the
train.

"The net is drawn pretty close round Fitzroy Simpson," he remarked, "and
I believe myself that he is our man. At the same time I recognize that
the evidence is purely circumstantial, and that some new development may
upset it."

"How about Straker's knife?"

"We have quite come to the conclusion that he wounded himself in his
fall."

"My friend Dr. Watson made that suggestion to me as we came down. If so,
it would tell against this man Simpson."

"Undoubtedly. He has neither a knife nor any sign of a wound. The
evidence against him is certainly very strong. He had a great interest
in the disappearance of the favorite. He lies under suspicion of having
poisoned the stable-boy, he was undoubtedly out in the storm, he was
armed with a heavy stick, and his cravat was found in the dead man's
hand. I really think we have enough to go before a jury."

Holmes shook his head. "A clever counsel would tear it all to rags,"
said he. "Why should he take the horse out of the stable? If he wished
to injure it why could he not do it there? Has a duplicate key been
found in his possession? What chemist sold him the powdered opium? Above
all, where could he, a stranger to the district, hide a horse, and such
a horse as this? What is his own explanation as to the paper which he
wished the maid to give to the stable-boy?"

"He says that it was a ten-pound note. One was found in his purse. But
your other difficulties are not so formidable as they seem. He is not
a stranger to the district. He has twice lodged at Tavistock in the
summer. The opium was probably brought from London. The key, having
served its purpose, would be hurled away. The horse may be at the bottom
of one of the pits or old mines upon the moor."

"What does he say about the cravat?"

"He acknowledges that it is his, and declares that he had lost it. But a
new element has been introduced into the case which may account for his
leading the horse from the stable."

Holmes pricked up his ears.

"We have found traces which show that a party of gypsies encamped on
Monday night within a mile of the spot where the murder took place. On
Tuesday they were gone. Now, presuming that there was some understanding
between Simpson and these gypsies, might he not have been leading the
horse to them when he was overtaken, and may they not have him now?"

"It is certainly possible."

"The moor is being scoured for these gypsies. I have also examined every
stable and out-house in Tavistock, and for a radius of ten miles."

"There is another training-stable quite close, I understand?"

"Yes, and that is a factor which we must certainly not neglect. As
Desborough, their horse, was second in the betting, they had an interest
in the disappearance of the favorite. Silas Brown, the trainer, is known
to have had large bets upon the event, and he was no friend to poor
Straker. We have, however, examined the stables, and there is nothing to
connect him with the affair."

"And nothing to connect this man Simpson with the interests of the
Mapleton stables?"

"Nothing at all."

Holmes leaned back in the carriage, and the conversation ceased. A few
minutes later our driver pulled up at a neat little red-brick villa with
overhanging eaves which stood by the road. Some distance off, across a
paddock, lay a long gray-tiled out-building. In every other direction
the low curves of the moor, bronze-colored from the fading ferns,
stretched away to the sky-line, broken only by the steeples of
Tavistock, and by a cluster of houses away to the westward which marked
the Mapleton stables. We all sprang out with the exception of Holmes,
who continued to lean back with his eyes fixed upon the sky in front of
him, entirely absorbed in his own thoughts. It was only when I touched
his arm that he roused himself with a violent start and stepped out of
the carriage.

"Excuse me," said he, turning to Colonel Ross, who had looked at him in
some surprise. "I was day-dreaming." There was a gleam in his eyes and a
suppressed excitement in his manner which convinced me, used as I was
to his ways, that his hand was upon a clue, though I could not imagine
where he had found it.

"Perhaps you would prefer at once to go on to the scene of the crime,
Mr. Holmes?" said Gregory.

"I think that I should prefer to stay here a little and go into one or
two questions of detail. Straker was brought back here, I presume?"

"Yes; he lies upstairs. The inquest is to-morrow."

"He has been in your service some years, Colonel Ross?"

"I have always found him an excellent servant."

"I presume that you made an inventory of what he had in his pockets at
the time of his death, Inspector?"

"I have the things themselves in the sitting-room, if you would care to
see them."

"I should be very glad." We all filed into the front room and sat round
the central table while the Inspector unlocked a square tin box and laid
a small heap of things before us. There was a box of vestas, two inches
of tallow candle, an A D P brier-root pipe, a pouch of seal-skin with
half an ounce of long-cut Cavendish, a silver watch with a gold chain,
five sovereigns in gold, an aluminum pencil-case, a few papers, and an
ivory-handled knife with a very delicate, inflexible blade marked Weiss
& Co., London.

"This is a very singular knife," said Holmes, lifting it up and
examining it minutely. "I presume, as I see blood-stains upon it, that
it is the one which was found in the dead man's grasp. Watson, this
knife is surely in your line?"

"It is what we call a cataract knife," said I.

"I thought so. A very delicate blade devised for very delicate work.
A strange thing for a man to carry with him upon a rough expedition,
especially as it would not shut in his pocket."

"The tip was guarded by a disk of cork which we found beside his body,"
said the Inspector. "His wife tells us that the knife had lain upon the
dressing-table, and that he had picked it up as he left the room. It was
a poor weapon, but perhaps the best that he could lay his hands on at
the moment."

"Very possible. How about these papers?"

"Three of them are receipted hay-dealers' accounts. One of them is a
letter of instructions from Colonel Ross. This other is a milliner's
account for thirty-seven pounds fifteen made out by Madame Lesurier,
of Bond Street, to William Derbyshire. Mrs. Straker tells us that
Derbyshire was a friend of her husband's and that occasionally his
letters were addressed here."

"Madam Derbyshire had somewhat expensive tastes," remarked Holmes,
glancing down the account. "Twenty-two guineas is rather heavy for a
single costume. However there appears to be nothing more to learn, and
we may now go down to the scene of the crime."

As we emerged from the sitting-room a woman, who had been waiting in
the passage, took a step forward and laid her hand upon the Inspector's
sleeve. Her face was haggard and thin and eager, stamped with the print
of a recent horror.

"Have you got them? Have you found them?" she panted.

"No, Mrs. Straker. But Mr. Holmes here has come from London to help us,
and we shall do all that is possible."

"Surely I met you in Plymouth at a garden-party some little time ago,
Mrs. Straker?" said Holmes.

"No, sir; you are mistaken."

"Dear me! Why, I could have sworn to it. You wore a costume of
dove-colored silk with ostrich-feather trimming."

"I never had such a dress, sir," answered the lady.

"Ah, that quite settles it," said Holmes. And with an apology he
followed the Inspector outside. A short walk across the moor took us to
the hollow in which the body had been found. At the brink of it was the
furze-bush upon which the coat had been hung.

"There was no wind that night, I understand," said Holmes.

"None; but very heavy rain."

"In that case the overcoat was not blown against the furze-bush, but
placed there."

"Yes, it was laid across the bush."

"You fill me with interest, I perceive that the ground has been trampled
up a good deal. No doubt many feet have been here since Monday night."

"A piece of matting has been laid here at the side, and we have all
stood upon that."

"Excellent."

"In this bag I have one of the boots which Straker wore, one of Fitzroy
Simpson's shoes, and a cast horseshoe of Silver Blaze."

"My dear Inspector, you surpass yourself!" Holmes took the bag, and,
descending into the hollow, he pushed the matting into a more central
position. Then stretching himself upon his face and leaning his chin
upon his hands, he made a careful study of the trampled mud in front of
him. "Hullo!" said he, suddenly. "What's this?" It was a wax vesta half
burned, which was so coated with mud that it looked at first like a
little chip of wood.

"I cannot think how I came to overlook it," said the Inspector, with an
expression of annoyance.

"It was invisible, buried in the mud. I only saw it because I was
looking for it."

"What! You expected to find it?"

"I thought it not unlikely."

He took the boots from the bag, and compared the impressions of each of
them with marks upon the ground. Then he clambered up to the rim of the
hollow, and crawled about among the ferns and bushes.

"I am afraid that there are no more tracks," said the Inspector. "I
have examined the ground very carefully for a hundred yards in each
direction."

"Indeed!" said Holmes, rising. "I should not have the impertinence to
do it again after what you say. But I should like to take a little walk
over the moor before it grows dark, that I may know my ground to-morrow,
and I think that I shall put this horseshoe into my pocket for luck."

Colonel Ross, who had shown some signs of impatience at my companion's
quiet and systematic method of work, glanced at his watch. "I wish you
would come back with me, Inspector," said he. "There are several points
on which I should like your advice, and especially as to whether we do
not owe it to the public to remove our horse's name from the entries for
the Cup."

"Certainly not," cried Holmes, with decision. "I should let the name
stand."

The Colonel bowed. "I am very glad to have had your opinion, sir," said
he. "You will find us at poor Straker's house when you have finished
your walk, and we can drive together into Tavistock."

He turned back with the Inspector, while Holmes and I walked slowly
across the moor. The sun was beginning to sink behind the stables of
Mapleton, and the long, sloping plain in front of us was tinged with
gold, deepening into rich, ruddy browns where the faded ferns and
brambles caught the evening light. But the glories of the landscape were
all wasted upon my companion, who was sunk in the deepest thought.

"It's this way, Watson," said he at last. "We may leave the question
of who killed John Straker for the instant, and confine ourselves to
finding out what has become of the horse. Now, supposing that he broke
away during or after the tragedy, where could he have gone to? The horse
is a very gregarious creature. If left to himself his instincts would
have been either to return to King's Pyland or go over to Mapleton. Why
should he run wild upon the moor? He would surely have been seen by now.
And why should gypsies kidnap him? These people always clear out when
they hear of trouble, for they do not wish to be pestered by the police.
They could not hope to sell such a horse. They would run a great risk
and gain nothing by taking him. Surely that is clear."

"Where is he, then?"

"I have already said that he must have gone to King's Pyland or to
Mapleton. He is not at King's Pyland. Therefore he is at Mapleton. Let
us take that as a working hypothesis and see what it leads us to. This
part of the moor, as the Inspector remarked, is very hard and dry. But
it falls away towards Mapleton, and you can see from here that there
is a long hollow over yonder, which must have been very wet on Monday
night. If our supposition is correct, then the horse must have crossed
that, and there is the point where we should look for his tracks."

We had been walking briskly during this conversation, and a few more
minutes brought us to the hollow in question. At Holmes' request I
walked down the bank to the right, and he to the left, but I had not
taken fifty paces before I heard him give a shout, and saw him waving
his hand to me. The track of a horse was plainly outlined in the soft
earth in front of him, and the shoe which he took from his pocket
exactly fitted the impression.

"See the value of imagination," said Holmes. "It is the one quality
which Gregory lacks. We imagined what might have happened, acted upon
the supposition, and find ourselves justified. Let us proceed."

We crossed the marshy bottom and passed over a quarter of a mile of dry,
hard turf. Again the ground sloped, and again we came on the tracks.
Then we lost them for half a mile, but only to pick them up once more
quite close to Mapleton. It was Holmes who saw them first, and he stood
pointing with a look of triumph upon his face. A man's track was visible
beside the horse's.

"The horse was alone before," I cried.

"Quite so. It was alone before. Hullo, what is this?"

The double track turned sharp off and took the direction of King's
Pyland. Holmes whistled, and we both followed along after it. His eyes
were on the trail, but I happened to look a little to one side, and
saw to my surprise the same tracks coming back again in the opposite
direction.

"One for you, Watson," said Holmes, when I pointed it out. "You have
saved us a long walk, which would have brought us back on our own
traces. Let us follow the return track."

We had not to go far. It ended at the paving of asphalt which led up
to the gates of the Mapleton stables. As we approached, a groom ran out
from them.

"We don't want any loiterers about here," said he.

"I only wished to ask a question," said Holmes, with his finger and
thumb in his waistcoat pocket. "Should I be too early to see your
master, Mr. Silas Brown, if I were to call at five o'clock to-morrow
morning?"

"Bless you, sir, if any one is about he will be, for he is always
the first stirring. But here he is, sir, to answer your questions for
himself. No, sir, no; it is as much as my place is worth to let him see
me touch your money. Afterwards, if you like."

As Sherlock Holmes replaced the half-crown which he had drawn from his
pocket, a fierce-looking elderly man strode out from the gate with a
hunting-crop swinging in his hand.

"What's this, Dawson!" he cried. "No gossiping! Go about your business!
And you, what the devil do you want here?"

"Ten minutes' talk with you, my good sir," said Holmes in the sweetest
of voices.

"I've no time to talk to every gadabout. We want no stranger here. Be
off, or you may find a dog at your heels."

Holmes leaned forward and whispered something in the trainer's ear. He
started violently and flushed to the temples.

"It's a lie!" he shouted, "an infernal lie!"

"Very good. Shall we argue about it here in public or talk it over in
your parlor?"

"Oh, come in if you wish to."

Holmes smiled. "I shall not keep you more than a few minutes, Watson,"
said he. "Now, Mr. Brown, I am quite at your disposal."

It was twenty minutes, and the reds had all faded into grays before
Holmes and the trainer reappeared. Never have I seen such a change as
had been brought about in Silas Brown in that short time. His face was
ashy pale, beads of perspiration shone upon his brow, and his hands
shook until the hunting-crop wagged like a branch in the wind. His
bullying, overbearing manner was all gone too, and he cringed along at
my companion's side like a dog with its master.

"Your instructions will be done. It shall all be done," said he.

"There must be no mistake," said Holmes, looking round at him. The other
winced as he read the menace in his eyes.

"Oh no, there shall be no mistake. It shall be there. Should I change it
first or not?"

Holmes thought a little and then burst out laughing. "No, don't," said
he; "I shall write to you about it. No tricks, now, or--"

"Oh, you can trust me, you can trust me!"

"Yes, I think I can. Well, you shall hear from me to-morrow." He turned
upon his heel, disregarding the trembling hand which the other held out
to him, and we set off for King's Pyland.

"A more perfect compound of the bully, coward, and sneak than Master
Silas Brown I have seldom met with," remarked Holmes as we trudged along
together.

"He has the horse, then?"

"He tried to bluster out of it, but I described to him so exactly what
his actions had been upon that morning that he is convinced that I was
watching him. Of course you observed the peculiarly square toes in the
impressions, and that his own boots exactly corresponded to them.
Again, of course no subordinate would have dared to do such a thing.
I described to him how, when according to his custom he was the first
down, he perceived a strange horse wandering over the moor. How he went
out to it, and his astonishment at recognizing, from the white forehead
which has given the favorite its name, that chance had put in his power
the only horse which could beat the one upon which he had put his money.
Then I described how his first impulse had been to lead him back to
King's Pyland, and how the devil had shown him how he could hide the
horse until the race was over, and how he had led it back and concealed
it at Mapleton. When I told him every detail he gave it up and thought
only of saving his own skin."

"But his stables had been searched?"

"Oh, an old horse-faker like him has many a dodge."

"But are you not afraid to leave the horse in his power now, since he
has every interest in injuring it?"

"My dear fellow, he will guard it as the apple of his eye. He knows that
his only hope of mercy is to produce it safe."

"Colonel Ross did not impress me as a man who would be likely to show
much mercy in any case."

"The matter does not rest with Colonel Ross. I follow my own methods,
and tell as much or as little as I choose. That is the advantage of
being unofficial. I don't know whether you observed it, Watson, but the
Colonel's manner has been just a trifle cavalier to me. I am inclined
now to have a little amusement at his expense. Say nothing to him about
the horse."

"Certainly not without your permission."

"And of course this is all quite a minor point compared to the question
of who killed John Straker."

"And you will devote yourself to that?"

"On the contrary, we both go back to London by the night train."

I was thunderstruck by my friend's words. We had only been a few hours
in Devonshire, and that he should give up an investigation which he had
begun so brilliantly was quite incomprehensible to me. Not a word more
could I draw from him until we were back at the trainer's house. The
Colonel and the Inspector were awaiting us in the parlor.

"My friend and I return to town by the night-express," said Holmes. "We
have had a charming little breath of your beautiful Dartmoor air."

The Inspector opened his eyes, and the Colonel's lip curled in a sneer.

"So you despair of arresting the murderer of poor Straker," said he.

Holmes shrugged his shoulders. "There are certainly grave difficulties
in the way," said he. "I have every hope, however, that your horse
will start upon Tuesday, and I beg that you will have your jockey in
readiness. Might I ask for a photograph of Mr. John Straker?"

The Inspector took one from an envelope and handed it to him.

"My dear Gregory, you anticipate all my wants. If I might ask you to
wait here for an instant, I have a question which I should like to put
to the maid."

"I must say that I am rather disappointed in our London consultant,"
said Colonel Ross, bluntly, as my friend left the room. "I do not see
that we are any further than when he came."

"At least you have his assurance that your horse will run," said I.

"Yes, I have his assurance," said the Colonel, with a shrug of his
shoulders. "I should prefer to have the horse."

I was about to make some reply in defence of my friend when he entered
the room again.

"Now, gentlemen," said he, "I am quite ready for Tavistock."

As we stepped into the carriage one of the stable-lads held the door
open for us. A sudden idea seemed to occur to Holmes, for he leaned
forward and touched the lad upon the sleeve.

"You have a few sheep in the paddock," he said. "Who attends to them?"

"I do, sir."

"Have you noticed anything amiss with them of late?"

"Well, sir, not of much account; but three of them have gone lame, sir."

I could see that Holmes was extremely pleased, for he chuckled and
rubbed his hands together.

"A long shot, Watson; a very long shot," said he, pinching my arm.
"Gregory, let me recommend to your attention this singular epidemic
among the sheep. Drive on, coachman!"

Colonel Ross still wore an expression which showed the poor opinion
which he had formed of my companion's ability, but I saw by the
Inspector's face that his attention had been keenly aroused.

"You consider that to be important?" he asked.

"Exceedingly so."

"Is there any point to which you would wish to draw my attention?"

"To the curious incident of the dog in the night-time."

"The dog did nothing in the night-time."

"That was the curious incident," remarked Sherlock Holmes.


Four days later Holmes and I were again in the train, bound for
Winchester to see the race for the Wessex Cup. Colonel Ross met us by
appointment outside the station, and we drove in his drag to the course
beyond the town. His face was grave, and his manner was cold in the
extreme.

"I have seen nothing of my horse," said he.

"I suppose that you would know him when you saw him?" asked Holmes.

The Colonel was very angry. "I have been on the turf for twenty years,
and never was asked such a question as that before," said he. "A
child would know Silver Blaze, with his white forehead and his mottled
off-foreleg."

"How is the betting?"

"Well, that is the curious part of it. You could have got fifteen to one
yesterday, but the price has become shorter and shorter, until you can
hardly get three to one now."

"Hum!" said Holmes. "Somebody knows something, that is clear."

As the drag drew up in the enclosure near the grand stand I glanced at
the card to see the entries.

Wessex Plate [it ran] 50 sovs each h ft with 1000 sovs added for four
and five year olds. Second, L300. Third, L200. New course (one mile and
five furlongs). Mr. Heath Newton's The Negro. Red cap. Cinnamon jacket.
Colonel Wardlaw's Pugilist. Pink cap. Blue and black jacket. Lord
Backwater's Desborough. Yellow cap and sleeves. Colonel Ross's Silver
Blaze. Black cap. Red jacket. Duke of Balmoral's Iris. Yellow and black
stripes. Lord Singleford's Rasper. Purple cap. Black sleeves.

"We scratched our other one, and put all hopes on your word," said the
Colonel. "Why, what is that? Silver Blaze favorite?"

"Five to four against Silver Blaze!" roared the ring. "Five to four
against Silver Blaze! Five to fifteen against Desborough! Five to four
on the field!"

"There are the numbers up," I cried. "They are all six there."

"All six there? Then my horse is running," cried the Colonel in great
agitation. "But I don't see him. My colors have not passed."

"Only five have passed. This must be he."

As I spoke a powerful bay horse swept out from the weighing enclosure
and cantered past us, bearing on its back the well-known black and red
of the Colonel.

"That's not my horse," cried the owner. "That beast has not a white hair
upon its body. What is this that you have done, Mr. Holmes?"

"Well, well, let us see how he gets on," said my friend, imperturbably.
For a few minutes he gazed through my field-glass. "Capital! An
excellent start!" he cried suddenly. "There they are, coming round the
curve!"

From our drag we had a superb view as they came up the straight. The six
horses were so close together that a carpet could have covered them,
but half way up the yellow of the Mapleton stable showed to the front.
Before they reached us, however, Desborough's bolt was shot, and the
Colonel's horse, coming away with a rush, passed the post a good six
lengths before its rival, the Duke of Balmoral's Iris making a bad
third.

"It's my race, anyhow," gasped the Colonel, passing his hand over his
eyes. "I confess that I can make neither head nor tail of it. Don't you
think that you have kept up your mystery long enough, Mr. Holmes?"

"Certainly, Colonel, you shall know everything. Let us all go round and
have a look at the horse together. Here he is," he continued, as we made
our way into the weighing enclosure, where only owners and their friends
find admittance. "You have only to wash his face and his leg in spirits
of wine, and you will find that he is the same old Silver Blaze as
ever."

"You take my breath away!"

"I found him in the hands of a faker, and took the liberty of running
him just as he was sent over."

"My dear sir, you have done wonders. The horse looks very fit and well.
It never went better in its life. I owe you a thousand apologies
for having doubted your ability. You have done me a great service by
recovering my horse. You would do me a greater still if you could lay
your hands on the murderer of John Straker."

"I have done so," said Holmes quietly.

The Colonel and I stared at him in amazement. "You have got him! Where
is he, then?"

"He is here."

"Here! Where?"

"In my company at the present moment."

The Colonel flushed angrily. "I quite recognize that I am under
obligations to you, Mr. Holmes," said he, "but I must regard what you
have just said as either a very bad joke or an insult."

Sherlock Holmes laughed. "I assure you that I have not associated
you with the crime, Colonel," said he. "The real murderer is standing
immediately behind you." He stepped past and laid his hand upon the
glossy neck of the thoroughbred.

"The horse!" cried both the Colonel and myself.

"Yes, the horse. And it may lessen his guilt if I say that it was
done in self-defence, and that John Straker was a man who was entirely
unworthy of your confidence. But there goes the bell, and as I stand
to win a little on this next race, I shall defer a lengthy explanation
until a more fitting time."



We had the corner of a Pullman car to ourselves that evening as we
whirled back to London, and I fancy that the journey was a short one
to Colonel Ross as well as to myself, as we listened to our
companion's narrative of the events which had occurred at the Dartmoor
training-stables upon the Monday night, and the means by which he had
unravelled them.

"I confess," said he, "that any theories which I had formed from
the newspaper reports were entirely erroneous. And yet there were
indications there, had they not been overlaid by other details which
concealed their true import. I went to Devonshire with the conviction
that Fitzroy Simpson was the true culprit, although, of course, I saw
that the evidence against him was by no means complete. It was while I
was in the carriage, just as we reached the trainer's house, that the
immense significance of the curried mutton occurred to me. You may
remember that I was distrait, and remained sitting after you had all
alighted. I was marvelling in my own mind how I could possibly have
overlooked so obvious a clue."

"I confess," said the Colonel, "that even now I cannot see how it helps
us."

"It was the first link in my chain of reasoning. Powdered opium is by no
means tasteless. The flavor is not disagreeable, but it is perceptible.
Were it mixed with any ordinary dish the eater would undoubtedly detect
it, and would probably eat no more. A curry was exactly the medium
which would disguise this taste. By no possible supposition could
this stranger, Fitzroy Simpson, have caused curry to be served in
the trainer's family that night, and it is surely too monstrous a
coincidence to suppose that he happened to come along with powdered
opium upon the very night when a dish happened to be served which would
disguise the flavor. That is unthinkable. Therefore Simpson becomes
eliminated from the case, and our attention centers upon Straker and
his wife, the only two people who could have chosen curried mutton for
supper that night. The opium was added after the dish was set aside
for the stable-boy, for the others had the same for supper with no ill
effects. Which of them, then, had access to that dish without the maid
seeing them?

"Before deciding that question I had grasped the significance of the
silence of the dog, for one true inference invariably suggests others.
The Simpson incident had shown me that a dog was kept in the stables,
and yet, though some one had been in and had fetched out a horse, he
had not barked enough to arouse the two lads in the loft. Obviously the
midnight visitor was some one whom the dog knew well.

"I was already convinced, or almost convinced, that John Straker went
down to the stables in the dead of the night and took out Silver Blaze.
For what purpose? For a dishonest one, obviously, or why should he drug
his own stable-boy? And yet I was at a loss to know why. There have been
cases before now where trainers have made sure of great sums of money
by laying against their own horses, through agents, and then preventing
them from winning by fraud. Sometimes it is a pulling jockey. Sometimes
it is some surer and subtler means. What was it here? I hoped that the
contents of his pockets might help me to form a conclusion.

"And they did so. You cannot have forgotten the singular knife which was
found in the dead man's hand, a knife which certainly no sane man would
choose for a weapon. It was, as Dr. Watson told us, a form of knife
which is used for the most delicate operations known in surgery. And it
was to be used for a delicate operation that night. You must know, with
your wide experience of turf matters, Colonel Ross, that it is possible
to make a slight nick upon the tendons of a horse's ham, and to do it
subcutaneously, so as to leave absolutely no trace. A horse so treated
would develop a slight lameness, which would be put down to a strain in
exercise or a touch of rheumatism, but never to foul play."

"Villain! Scoundrel!" cried the Colonel.

"We have here the explanation of why John Straker wished to take the
horse out on to the moor. So spirited a creature would have certainly
roused the soundest of sleepers when it felt the prick of the knife. It
was absolutely necessary to do it in the open air."

"I have been blind!" cried the Colonel. "Of course that was why he
needed the candle, and struck the match."

"Undoubtedly. But in examining his belongings I was fortunate enough to
discover not only the method of the crime, but even its motives. As a
man of the world, Colonel, you know that men do not carry other people's
bills about in their pockets. We have most of us quite enough to do to
settle our own. I at once concluded that Straker was leading a double
life, and keeping a second establishment. The nature of the bill showed
that there was a lady in the case, and one who had expensive tastes.
Liberal as you are with your servants, one can hardly expect that they
can buy twenty-guinea walking dresses for their ladies. I questioned
Mrs. Straker as to the dress without her knowing it, and having
satisfied myself that it had never reached her, I made a note of the
milliner's address, and felt that by calling there with Straker's
photograph I could easily dispose of the mythical Derbyshire.

"From that time on all was plain. Straker had led out the horse to a
hollow where his light would be invisible. Simpson in his flight had
dropped his cravat, and Straker had picked it up--with some idea,
perhaps, that he might use it in securing the horse's leg. Once in the
hollow, he had got behind the horse and had struck a light; but the
creature frightened at the sudden glare, and with the strange instinct
of animals feeling that some mischief was intended, had lashed out, and
the steel shoe had struck Straker full on the forehead. He had already,
in spite of the rain, taken off his overcoat in order to do his delicate
task, and so, as he fell, his knife gashed his thigh. Do I make it
clear?"

"Wonderful!" cried the Colonel. "Wonderful! You might have been there!"

"My final shot was, I confess a very long one. It struck me that so
astute a man as Straker would not undertake this delicate tendon-nicking
without a little practice. What could he practice on? My eyes fell upon
the sheep, and I asked a question which, rather to my surprise, showed
that my surmise was correct.

"When I returned to London I called upon the milliner, who had
recognized Straker as an excellent customer of the name of Derbyshire,
who had a very dashing wife, with a strong partiality for expensive
dresses. I have no doubt that this woman had plunged him over head and
ears in debt, and so led him into this miserable plot."

"You have explained all but one thing," cried the Colonel. "Where was
the horse?"

"Ah, it bolted, and was cared for by one of your neighbors. We must have
an amnesty in that direction, I think. This is Clapham Junction, if I am
not mistaken, and we shall be in Victoria in less than ten minutes. If
you care to smoke a cigar in our rooms, Colonel, I shall be happy to
give you any other details which might interest you."




Adventure II. The Yellow Face


[In publishing these short sketches based upon the numerous cases in
which my companion's singular gifts have made us the listeners to, and
eventually the actors in, some strange drama, it is only natural that I
should dwell rather upon his successes than upon his failures. And this
not so much for the sake of his reputation--for, indeed, it was when
he was at his wits' end that his energy and his versatility were most
admirable--but because where he failed it happened too often that no one
else succeeded, and that the tale was left forever without a conclusion.
Now and again, however, it chanced that even when he erred, the truth
was still discovered. I have noted of some half-dozen cases of the
kind; the Adventure of the Musgrave Ritual and that which I am about to
recount are the two which present the strongest features of interest.]

Sherlock Holmes was a man who seldom took exercise for exercise's sake.
Few men were capable of greater muscular effort, and he was undoubtedly
one of the finest boxers of his weight that I have ever seen; but he
looked upon aimless bodily exertion as a waste of energy, and he seldom
bestirred himself save when there was some professional object to be
served. Then he was absolutely untiring and indefatigable. That he
should have kept himself in training under such circumstances is
remarkable, but his diet was usually of the sparest, and his habits
were simple to the verge of austerity. Save for the occasional use of
cocaine, he had no vices, and he only turned to the drug as a protest
against the monotony of existence when cases were scanty and the papers
uninteresting.

One day in early spring he had so far relaxed as to go for a walk with
me in the Park, where the first faint shoots of green were breaking out
upon the elms, and the sticky spear-heads of the chestnuts were just
beginning to burst into their five-fold leaves. For two hours we rambled
about together, in silence for the most part, as befits two men who know
each other intimately. It was nearly five before we were back in Baker
Street once more.

"Beg pardon, sir," said our page-boy, as he opened the door. "There's
been a gentleman here asking for you, sir."

Holmes glanced reproachfully at me. "So much for afternoon walks!" said
he. "Has this gentleman gone, then?"

"Yes, sir."

"Didn't you ask him in?"

"Yes, sir; he came in."

"How long did he wait?"

"Half an hour, sir. He was a very restless gentleman, sir, a-walkin'
and a-stampin' all the time he was here. I was waitin' outside the door,
sir, and I could hear him. At last he outs into the passage, and he
cries, 'Is that man never goin' to come?' Those were his very words,
sir. 'You'll only need to wait a little longer,' says I. 'Then I'll wait
in the open air, for I feel half choked,' says he. 'I'll be back before
long.' And with that he ups and he outs, and all I could say wouldn't
hold him back."

"Well, well, you did your best," said Holmes, as we walked into our
room. "It's very annoying, though, Watson. I was badly in need of
a case, and this looks, from the man's impatience, as if it were of
importance. Hullo! That's not your pipe on the table. He must have
left his behind him. A nice old brier with a good long stem of what the
tobacconists call amber. I wonder how many real amber mouthpieces there
are in London? Some people think that a fly in it is a sign. Well, he
must have been disturbed in his mind to leave a pipe behind him which he
evidently values highly."

"How do you know that he values it highly?" I asked.

"Well, I should put the original cost of the pipe at seven and sixpence.
Now it has, you see, been twice mended, once in the wooden stem and once
in the amber. Each of these mends, done, as you observe, with silver
bands, must have cost more than the pipe did originally. The man must
value the pipe highly when he prefers to patch it up rather than buy a
new one with the same money."

"Anything else?" I asked, for Holmes was turning the pipe about in his
hand, and staring at it in his peculiar pensive way.

He held it up and tapped on it with his long, thin fore-finger, as a
professor might who was lecturing on a bone.

"Pipes are occasionally of extraordinary interest," said he. "Nothing
has more individuality, save perhaps watches and bootlaces. The
indications here, however, are neither very marked nor very important.
The owner is obviously a muscular man, left-handed, with an excellent
set of teeth, careless in his habits, and with no need to practise
economy."

My friend threw out the information in a very offhand way, but I saw
that he cocked his eye at me to see if I had followed his reasoning.

"You think a man must be well-to-do if he smokes a seven-shilling pipe,"
said I.

"This is Grosvenor mixture at eightpence an ounce," Holmes answered,
knocking a little out on his palm. "As he might get an excellent smoke
for half the price, he has no need to practise economy."

"And the other points?"

"He has been in the habit of lighting his pipe at lamps and gas-jets.
You can see that it is quite charred all down one side. Of course a
match could not have done that. Why should a man hold a match to the
side of his pipe? But you cannot light it at a lamp without getting the
bowl charred. And it is all on the right side of the pipe. From that I
gather that he is a left-handed man. You hold your own pipe to the lamp,
and see how naturally you, being right-handed, hold the left side to the
flame. You might do it once the other way, but not as a constancy. This
has always been held so. Then he has bitten through his amber. It takes
a muscular, energetic fellow, and one with a good set of teeth, to do
that. But if I am not mistaken I hear him upon the stair, so we shall
have something more interesting than his pipe to study."

An instant later our door opened, and a tall young man entered the room.
He was well but quietly dressed in a dark-gray suit, and carried a brown
wide-awake in his hand. I should have put him at about thirty, though he
was really some years older.

"I beg your pardon," said he, with some embarrassment; "I suppose I
should have knocked. Yes, of course I should have knocked. The fact
is that I am a little upset, and you must put it all down to that." He
passed his hand over his forehead like a man who is half dazed, and then
fell rather than sat down upon a chair.

"I can see that you have not slept for a night or two," said Holmes,
in his easy, genial way. "That tries a man's nerves more than work, and
more even than pleasure. May I ask how I can help you?"

"I wanted your advice, sir. I don't know what to do and my whole life
seems to have gone to pieces."

"You wish to employ me as a consulting detective?"

"Not that only. I want your opinion as a judicious man--as a man of the
world. I want to know what I ought to do next. I hope to God you'll be
able to tell me."

He spoke in little, sharp, jerky outbursts, and it seemed to me that to
speak at all was very painful to him, and that his will all through was
overriding his inclinations.

"It's a very delicate thing," said he. "One does not like to speak of
one's domestic affairs to strangers. It seems dreadful to discuss the
conduct of one's wife with two men whom I have never seen before. It's
horrible to have to do it. But I've got to the end of my tether, and I
must have advice."

"My dear Mr. Grant Munro--" began Holmes.

Our visitor sprang from his chair. "What!" he cried, "you know my name?"

"If you wish to preserve your incognito," said Holmes, smiling, "I would
suggest that you cease to write your name upon the lining of your
hat, or else that you turn the crown towards the person whom you are
addressing. I was about to say that my friend and I have listened to a
good many strange secrets in this room, and that we have had the good
fortune to bring peace to many troubled souls. I trust that we may do as
much for you. Might I beg you, as time may prove to be of importance, to
furnish me with the facts of your case without further delay?"

Our visitor again passed his hand over his forehead, as if he found it
bitterly hard. From every gesture and expression I could see that he was
a reserved, self-contained man, with a dash of pride in his nature, more
likely to hide his wounds than to expose them. Then suddenly, with a
fierce gesture of his closed hand, like one who throws reserve to the
winds, he began.

"The facts are these, Mr. Holmes," said he. "I am a married man, and
have been so for three years. During that time my wife and I have loved
each other as fondly and lived as happily as any two that ever were
joined. We have not had a difference, not one, in thought or word or
deed. And now, since last Monday, there has suddenly sprung up a barrier
between us, and I find that there is something in her life and in her
thought of which I know as little as if she were the woman who brushes
by me in the street. We are estranged, and I want to know why.

"Now there is one thing that I want to impress upon you before I go
any further, Mr. Holmes. Effie loves me. Don't let there be any mistake
about that. She loves me with her whole heart and soul, and never more
than now. I know it. I feel it. I don't want to argue about that. A man
can tell easily enough when a woman loves him. But there's this secret
between us, and we can never be the same until it is cleared."

"Kindly let me have the facts, Mr. Munro," said Holmes, with some
impatience.

"I'll tell you what I know about Effie's history. She was a widow when
I met her first, though quite young--only twenty-five. Her name then was
Mrs. Hebron. She went out to America when she was young, and lived in
the town of Atlanta, where she married this Hebron, who was a lawyer
with a good practice. They had one child, but the yellow fever broke out
badly in the place, and both husband and child died of it. I have seen
his death certificate. This sickened her of America, and she came back
to live with a maiden aunt at Pinner, in Middlesex. I may mention that
her husband had left her comfortably off, and that she had a capital of
about four thousand five hundred pounds, which had been so well invested
by him that it returned an average of seven per cent. She had only been
six months at Pinner when I met her; we fell in love with each other,
and we married a few weeks afterwards.

"I am a hop merchant myself, and as I have an income of seven or
eight hundred, we found ourselves comfortably off, and took a nice
eighty-pound-a-year villa at Norbury. Our little place was very
countrified, considering that it is so close to town. We had an inn and
two houses a little above us, and a single cottage at the other side of
the field which faces us, and except those there were no houses until
you got half way to the station. My business took me into town at
certain seasons, but in summer I had less to do, and then in our country
home my wife and I were just as happy as could be wished. I tell you
that there never was a shadow between us until this accursed affair
began.

"There's one thing I ought to tell you before I go further. When we
married, my wife made over all her property to me--rather against my
will, for I saw how awkward it would be if my business affairs went
wrong. However, she would have it so, and it was done. Well, about six
weeks ago she came to me.

"'Jack,' said she, 'when you took my money you said that if ever I
wanted any I was to ask you for it.'

"'Certainly,' said I. 'It's all your own.'

"'Well,' said she, 'I want a hundred pounds.'

"I was a bit staggered at this, for I had imagined it was simply a new
dress or something of the kind that she was after.

"'What on earth for?' I asked.

"'Oh,' said she, in her playful way, 'you said that you were only my
banker, and bankers never ask questions, you know.'

"'If you really mean it, of course you shall have the money,' said I.

"'Oh, yes, I really mean it.'

"'And you won't tell me what you want it for?'

"'Some day, perhaps, but not just at present, Jack.'

"So I had to be content with that, though it was the first time that
there had ever been any secret between us. I gave her a check, and I
never thought any more of the matter. It may have nothing to do with
what came afterwards, but I thought it only right to mention it.

"Well, I told you just now that there is a cottage not far from our
house. There is just a field between us, but to reach it you have to
go along the road and then turn down a lane. Just beyond it is a nice
little grove of Scotch firs, and I used to be very fond of strolling
down there, for trees are always a neighborly kind of things. The
cottage had been standing empty this eight months, and it was a pity,
for it was a pretty two-storied place, with an old-fashioned porch and
honeysuckle about it. I have stood many a time and thought what a neat
little homestead it would make.

"Well, last Monday evening I was taking a stroll down that way, when
I met an empty van coming up the lane, and saw a pile of carpets and
things lying about on the grass-plot beside the porch. It was clear that
the cottage had at last been let. I walked past it, and wondered what
sort of folk they were who had come to live so near us. And as I looked
I suddenly became aware that a face was watching me out of one of the
upper windows.

"I don't know what there was about that face, Mr. Holmes, but it seemed
to send a chill right down my back. I was some little way off, so that
I could not make out the features, but there was something unnatural and
inhuman about the face. That was the impression that I had, and I moved
quickly forwards to get a nearer view of the person who was watching
me. But as I did so the face suddenly disappeared, so suddenly that it
seemed to have been plucked away into the darkness of the room. I stood
for five minutes thinking the business over, and trying to analyze my
impressions. I could not tell if the face were that of a man or a
woman. It had been too far from me for that. But its color was what had
impressed me most. It was of a livid chalky white, and with something
set and rigid about it which was shockingly unnatural. So disturbed
was I that I determined to see a little more of the new inmates of
the cottage. I approached and knocked at the door, which was instantly
opened by a tall, gaunt woman with a harsh, forbidding face.

"'What may you be wantin'?' she asked, in a Northern accent.

"'I am your neighbor over yonder,' said I, nodding towards my house. 'I
see that you have only just moved in, so I thought that if I could be of
any help to you in any--'

"'Ay, we'll just ask ye when we want ye,' said she, and shut the door
in my face. Annoyed at the churlish rebuff, I turned my back and walked
home. All evening, though I tried to think of other things, my mind
would still turn to the apparition at the window and the rudeness of the
woman. I determined to say nothing about the former to my wife, for
she is a nervous, highly strung woman, and I had no wish that she would
share the unpleasant impression which had been produced upon myself. I
remarked to her, however, before I fell asleep, that the cottage was now
occupied, to which she returned no reply.

"I am usually an extremely sound sleeper. It has been a standing jest
in the family that nothing could ever wake me during the night. And yet
somehow on that particular night, whether it may have been the slight
excitement produced by my little adventure or not I know not, but
I slept much more lightly than usual. Half in my dreams I was dimly
conscious that something was going on in the room, and gradually became
aware that my wife had dressed herself and was slipping on her mantle
and her bonnet. My lips were parted to murmur out some sleepy words of
surprise or remonstrance at this untimely preparation, when suddenly my
half-opened eyes fell upon her face, illuminated by the candle-light,
and astonishment held me dumb. She wore an expression such as I had
never seen before--such as I should have thought her incapable of
assuming. She was deadly pale and breathing fast, glancing furtively
towards the bed as she fastened her mantle, to see if she had disturbed
me. Then, thinking that I was still asleep, she slipped noiselessly from
the room, and an instant later I heard a sharp creaking which could only
come from the hinges of the front door. I sat up in bed and rapped my
knuckles against the rail to make certain that I was truly awake. Then
I took my watch from under the pillow. It was three in the morning. What
on this earth could my wife be doing out on the country road at three in
the morning?

"I had sat for about twenty minutes turning the thing over in my mind
and trying to find some possible explanation. The more I thought, the
more extraordinary and inexplicable did it appear. I was still puzzling
over it when I heard the door gently close again, and her footsteps
coming up the stairs.

"'Where in the world have you been, Effie?' I asked as she entered.

"She gave a violent start and a kind of gasping cry when I spoke, and
that cry and start troubled me more than all the rest, for there was
something indescribably guilty about them. My wife had always been
a woman of a frank, open nature, and it gave me a chill to see her
slinking into her own room, and crying out and wincing when her own
husband spoke to her.

"'You awake, Jack!' she cried, with a nervous laugh. 'Why, I thought
that nothing could awake you.'

"'Where have you been?' I asked, more sternly.

"'I don't wonder that you are surprised,' said she, and I could see that
her fingers were trembling as she undid the fastenings of her mantle.
'Why, I never remember having done such a thing in my life before. The
fact is that I felt as though I were choking, and had a perfect longing
for a breath of fresh air. I really think that I should have fainted if
I had not gone out. I stood at the door for a few minutes, and now I am
quite myself again.'

"All the time that she was telling me this story she never once looked
in my direction, and her voice was quite unlike her usual tones. It
was evident to me that she was saying what was false. I said nothing
in reply, but turned my face to the wall, sick at heart, with my mind
filled with a thousand venomous doubts and suspicions. What was it that
my wife was concealing from me? Where had she been during that strange
expedition? I felt that I should have no peace until I knew, and yet I
shrank from asking her again after once she had told me what was false.
All the rest of the night I tossed and tumbled, framing theory after
theory, each more unlikely than the last.

"I should have gone to the City that day, but I was too disturbed in my
mind to be able to pay attention to business matters. My wife seemed
to be as upset as myself, and I could see from the little questioning
glances which she kept shooting at me that she understood that I
disbelieved her statement, and that she was at her wits' end what to do.
We hardly exchanged a word during breakfast, and immediately afterwards
I went out for a walk, that I might think the matter out in the fresh
morning air.

"I went as far as the Crystal Palace, spent an hour in the grounds, and
was back in Norbury by one o'clock. It happened that my way took me past
the cottage, and I stopped for an instant to look at the windows, and to
see if I could catch a glimpse of the strange face which had looked
out at me on the day before. As I stood there, imagine my surprise, Mr.
Holmes, when the door suddenly opened and my wife walked out.

"I was struck dumb with astonishment at the sight of her; but my
emotions were nothing to those which showed themselves upon her face
when our eyes met. She seemed for an instant to wish to shrink back
inside the house again; and then, seeing how useless all concealment
must be, she came forward, with a very white face and frightened eyes
which belied the smile upon her lips.

"'Ah, Jack,' she said, 'I have just been in to see if I can be of any
assistance to our new neighbors. Why do you look at me like that, Jack?
You are not angry with me?'

"'So,' said I, 'this is where you went during the night.'

"'What do you mean?' she cried.

"'You came here. I am sure of it. Who are these people, that you should
visit them at such an hour?'

"'I have not been here before.'

"'How can you tell me what you know is false?' I cried. 'Your very voice
changes as you speak. When have I ever had a secret from you? I shall
enter that cottage, and I shall probe the matter to the bottom.'

"'No, no, Jack, for God's sake!' she gasped, in uncontrollable emotion.
Then, as I approached the door, she seized my sleeve and pulled me back
with convulsive strength.

"'I implore you not to do this, Jack,' she cried. 'I swear that I will
tell you everything some day, but nothing but misery can come of it if
you enter that cottage.' Then, as I tried to shake her off, she clung to
me in a frenzy of entreaty.

"'Trust me, Jack!' she cried. 'Trust me only this once. You will never
have cause to regret it. You know that I would not have a secret from
you if it were not for your own sake. Our whole lives are at stake in
this. If you come home with me, all will be well. If you force your way
into that cottage, all is over between us.'

"There was such earnestness, such despair, in her manner that her words
arrested me, and I stood irresolute before the door.

"'I will trust you on one condition, and on one condition only,' said I
at last. 'It is that this mystery comes to an end from now. You are
at liberty to preserve your secret, but you must promise me that there
shall be no more nightly visits, no more doings which are kept from my
knowledge. I am willing to forget those which are passed if you will
promise that there shall be no more in the future.'

"'I was sure that you would trust me,' she cried, with a great sigh of
relief. 'It shall be just as you wish. Come away--oh, come away up to
the house.'

"Still pulling at my sleeve, she led me away from the cottage. As we
went I glanced back, and there was that yellow livid face watching us
out of the upper window. What link could there be between that creature
and my wife? Or how could the coarse, rough woman whom I had seen the
day before be connected with her? It was a strange puzzle, and yet I
knew that my mind could never know ease again until I had solved it.

"For two days after this I stayed at home, and my wife appeared to abide
loyally by our engagement, for, as far as I know, she never stirred out
of the house. On the third day, however, I had ample evidence that
her solemn promise was not enough to hold her back from this secret
influence which drew her away from her husband and her duty.

"I had gone into town on that day, but I returned by the 2.40 instead of
the 3.36, which is my usual train. As I entered the house the maid ran
into the hall with a startled face.

"'Where is your mistress?' I asked.

"'I think that she has gone out for a walk,' she answered.

"My mind was instantly filled with suspicion. I rushed upstairs to make
sure that she was not in the house. As I did so I happened to glance out
of one of the upper windows, and saw the maid with whom I had just been
speaking running across the field in the direction of the cottage. Then
of course I saw exactly what it all meant. My wife had gone over there,
and had asked the servant to call her if I should return. Tingling with
anger, I rushed down and hurried across, determined to end the matter
once and forever. I saw my wife and the maid hurrying back along the
lane, but I did not stop to speak with them. In the cottage lay the
secret which was casting a shadow over my life. I vowed that, come what
might, it should be a secret no longer. I did not even knock when I
reached it, but turned the handle and rushed into the passage.

"It was all still and quiet upon the ground floor. In the kitchen a
kettle was singing on the fire, and a large black cat lay coiled up in
the basket; but there was no sign of the woman whom I had seen before.
I ran into the other room, but it was equally deserted. Then I rushed up
the stairs, only to find two other rooms empty and deserted at the top.
There was no one at all in the whole house. The furniture and pictures
were of the most common and vulgar description, save in the one chamber
at the window of which I had seen the strange face. That was comfortable
and elegant, and all my suspicions rose into a fierce bitter flame when
I saw that on the mantelpiece stood a copy of a full-length photograph
of my wife, which had been taken at my request only three months ago.

"I stayed long enough to make certain that the house was absolutely
empty. Then I left it, feeling a weight at my heart such as I had never
had before. My wife came out into the hall as I entered my house; but I
was too hurt and angry to speak with her, and pushing past her, I made
my way into my study. She followed me, however, before I could close the
door.

"'I am sorry that I broke my promise, Jack,' said she; 'but if you knew
all the circumstances I am sure that you would forgive me.'

"'Tell me everything, then,' said I.

"'I cannot, Jack, I cannot,' she cried.

"'Until you tell me who it is that has been living in that cottage, and
who it is to whom you have given that photograph, there can never be any
confidence between us,' said I, and breaking away from her, I left the
house. That was yesterday, Mr. Holmes, and I have not seen her since,
nor do I know anything more about this strange business. It is the first
shadow that has come between us, and it has so shaken me that I do not
know what I should do for the best. Suddenly this morning it occurred to
me that you were the man to advise me, so I have hurried to you now, and
I place myself unreservedly in your hands. If there is any point which I
have not made clear, pray question me about it. But, above all, tell me
quickly what I am to do, for this misery is more than I can bear."

Holmes and I had listened with the utmost interest to this extraordinary
statement, which had been delivered in the jerky, broken fashion of a
man who is under the influence of extreme emotions. My companion sat
silent for some time, with his chin upon his hand, lost in thought.

"Tell me," said he at last, "could you swear that this was a man's face
which you saw at the window?"

"Each time that I saw it I was some distance away from it, so that it is
impossible for me to say."

"You appear, however, to have been disagreeably impressed by it."

"It seemed to be of an unnatural color, and to have a strange rigidity
about the features. When I approached, it vanished with a jerk."

"How long is it since your wife asked you for a hundred pounds?"

"Nearly two months."

"Have you ever seen a photograph of her first husband?"

"No; there was a great fire at Atlanta very shortly after his death, and
all her papers were destroyed."

"And yet she had a certificate of death. You say that you saw it."

"Yes; she got a duplicate after the fire."

"Did you ever meet any one who knew her in America?"

"No."

"Did she ever talk of revisiting the place?"

"No."

"Or get letters from it?"

"No."

"Thank you. I should like to think over the matter a little now. If the
cottage is now permanently deserted we may have some difficulty. If, on
the other hand, as I fancy is more likely, the inmates were warned of
your coming, and left before you entered yesterday, then they may be
back now, and we should clear it all up easily. Let me advise you, then,
to return to Norbury, and to examine the windows of the cottage again.
If you have reason to believe that it is inhabited, do not force your
way in, but send a wire to my friend and me. We shall be with you within
an hour of receiving it, and we shall then very soon get to the bottom
of the business."

"And if it is still empty?"

"In that case I shall come out to-morrow and talk it over with you.
Good-by; and, above all, do not fret until you know that you really have
a cause for it."

"I am afraid that this is a bad business, Watson," said my companion, as
he returned after accompanying Mr. Grant Munro to the door. "What do you
make of it?"

"It had an ugly sound," I answered.

"Yes. There's blackmail in it, or I am much mistaken."

"And who is the blackmailer?"

"Well, it must be the creature who lives in the only comfortable room
in the place, and has her photograph above his fireplace. Upon my word,
Watson, there is something very attractive about that livid face at the
window, and I would not have missed the case for worlds."

"You have a theory?"

"Yes, a provisional one. But I shall be surprised if it does not turn
out to be correct. This woman's first husband is in that cottage."

"Why do you think so?"

"How else can we explain her frenzied anxiety that her second one should
not enter it? The facts, as I read them, are something like this:
This woman was married in America. Her husband developed some hateful
qualities; or shall we say that he contracted some loathsome disease,
and became a leper or an imbecile? She flies from him at last, returns
to England, changes her name, and starts her life, as she thinks,
afresh. She has been married three years, and believes that her position
is quite secure, having shown her husband the death certificate of
some man whose name she has assumed, when suddenly her whereabouts
is discovered by her first husband; or, we may suppose, by some
unscrupulous woman who has attached herself to the invalid. They write
to the wife, and threaten to come and expose her. She asks for a hundred
pounds, and endeavors to buy them off. They come in spite of it, and
when the husband mentions casually to the wife that there are new-comers
in the cottage, she knows in some way that they are her pursuers. She
waits until her husband is asleep, and then she rushes down to endeavor
to persuade them to leave her in peace. Having no success, she goes
again next morning, and her husband meets her, as he has told us, as
she comes out. She promises him then not to go there again, but two days
afterwards the hope of getting rid of those dreadful neighbors was too
strong for her, and she made another attempt, taking down with her the
photograph which had probably been demanded from her. In the midst of
this interview the maid rushed in to say that the master had come home,
on which the wife, knowing that he would come straight down to the
cottage, hurried the inmates out at the back door, into the grove of
fir-trees, probably, which was mentioned as standing near. In this way
he found the place deserted. I shall be very much surprised, however, if
it is still so when he reconnoitres it this evening. What do you think
of my theory?"

"It is all surmise."

"But at least it covers all the facts. When new facts come to our
knowledge which cannot be covered by it, it will be time enough to
reconsider it. We can do nothing more until we have a message from our
friend at Norbury."

But we had not a very long time to wait for that. It came just as we had
finished our tea. "The cottage is still tenanted," it said. "Have seen
the face again at the window. Will meet the seven o'clock train, and
will take no steps until you arrive."


He was waiting on the platform when we stepped out, and we could see in
the light of the station lamps that he was very pale, and quivering with
agitation.

"They are still there, Mr. Holmes," said he, laying his hand hard upon
my friend's sleeve. "I saw lights in the cottage as I came down. We
shall settle it now once and for all."

"What is your plan, then?" asked Holmes, as he walked down the dark
tree-lined road.

"I am going to force my way in and see for myself who is in the house. I
wish you both to be there as witnesses."

"You are quite determined to do this, in spite of your wife's warning
that it is better that you should not solve the mystery?"

"Yes, I am determined."

"Well, I think that you are in the right. Any truth is better than
indefinite doubt. We had better go up at once. Of course, legally, we
are putting ourselves hopelessly in the wrong; but I think that it is
worth it."

It was a very dark night, and a thin rain began to fall as we turned
from the high road into a narrow lane, deeply rutted, with hedges on
either side. Mr. Grant Munro pushed impatiently forward, however, and we
stumbled after him as best we could.

"There are the lights of my house," he murmured, pointing to a glimmer
among the trees. "And here is the cottage which I am going to enter."

We turned a corner in the lane as he spoke, and there was the building
close beside us. A yellow bar falling across the black foreground showed
that the door was not quite closed, and one window in the upper story
was brightly illuminated. As we looked, we saw a dark blur moving across
the blind.

"There is that creature!" cried Grant Munro. "You can see for yourselves
that some one is there. Now follow me, and we shall soon know all."

We approached the door; but suddenly a woman appeared out of the shadow
and stood in the golden track of the lamp-light. I could not see her
face in the darkness, but her arms were thrown out in an attitude of
entreaty.

"For God's sake, don't Jack!" she cried. "I had a presentiment that you
would come this evening. Think better of it, dear! Trust me again, and
you will never have cause to regret it."

"I have trusted you too long, Effie," he cried, sternly. "Leave go of
me! I must pass you. My friends and I are going to settle this matter
once and forever!" He pushed her to one side, and we followed closely
after him. As he threw the door open an old woman ran out in front of
him and tried to bar his passage, but he thrust her back, and an instant
afterwards we were all upon the stairs. Grant Munro rushed into the
lighted room at the top, and we entered at his heels.

It was a cosey, well-furnished apartment, with two candles burning upon
the table and two upon the mantelpiece. In the corner, stooping over a
desk, there sat what appeared to be a little girl. Her face was turned
away as we entered, but we could see that she was dressed in a red
frock, and that she had long white gloves on. As she whisked round
to us, I gave a cry of surprise and horror. The face which she turned
towards us was of the strangest livid tint, and the features were
absolutely devoid of any expression. An instant later the mystery was
explained. Holmes, with a laugh, passed his hand behind the child's
ear, a mask peeled off from her countenance, and there was a little coal
black negress, with all her white teeth flashing in amusement at our
amazed faces. I burst out laughing, out of sympathy with her merriment;
but Grant Munro stood staring, with his hand clutching his throat.

"My God!" he cried. "What can be the meaning of this?"

"I will tell you the meaning of it," cried the lady, sweeping into
the room with a proud, set face. "You have forced me, against my own
judgment, to tell you, and now we must both make the best of it. My
husband died at Atlanta. My child survived."

"Your child?"

She drew a large silver locket from her bosom. "You have never seen this
open."

"I understood that it did not open."

She touched a spring, and the front hinged back. There was a portrait
within of a man strikingly handsome and intelligent-looking, but bearing
unmistakable signs upon his features of his African descent.

"That is John Hebron, of Atlanta," said the lady, "and a nobler man
never walked the earth. I cut myself off from my race in order to wed
him, but never once while he lived did I for an instant regret it. It
was our misfortune that our only child took after his people rather than
mine. It is often so in such matches, and little Lucy is darker far than
ever her father was. But dark or fair, she is my own dear little girlie,
and her mother's pet." The little creature ran across at the words and
nestled up against the lady's dress. "When I left her in America," she
continued, "it was only because her health was weak, and the change
might have done her harm. She was given to the care of a faithful Scotch
woman who had once been our servant. Never for an instant did I dream
of disowning her as my child. But when chance threw you in my way, Jack,
and I learned to love you, I feared to tell you about my child. God
forgive me, I feared that I should lose you, and I had not the courage
to tell you. I had to choose between you, and in my weakness I turned
away from my own little girl. For three years I have kept her existence
a secret from you, but I heard from the nurse, and I knew that all was
well with her. At last, however, there came an overwhelming desire to
see the child once more. I struggled against it, but in vain. Though I
knew the danger, I determined to have the child over, if it were but
for a few weeks. I sent a hundred pounds to the nurse, and I gave her
instructions about this cottage, so that she might come as a neighbor,
without my appearing to be in any way connected with her. I pushed my
precautions so far as to order her to keep the child in the house during
the daytime, and to cover up her little face and hands so that even
those who might see her at the window should not gossip about there
being a black child in the neighborhood. If I had been less cautious
I might have been more wise, but I was half crazy with fear that you
should learn the truth.

"It was you who told me first that the cottage was occupied. I should
have waited for the morning, but I could not sleep for excitement, and
so at last I slipped out, knowing how difficult it is to awake you. But
you saw me go, and that was the beginning of my troubles. Next day you
had my secret at your mercy, but you nobly refrained from pursuing your
advantage. Three days later, however, the nurse and child only just
escaped from the back door as you rushed in at the front one. And now
to-night you at last know all, and I ask you what is to become of us, my
child and me?" She clasped her hands and waited for an answer.

It was a long ten minutes before Grant Munro broke the silence, and
when his answer came it was one of which I love to think. He lifted
the little child, kissed her, and then, still carrying her, he held his
other hand out to his wife and turned towards the door.

"We can talk it over more comfortably at home," said he. "I am not a
very good man, Effie, but I think that I am a better one than you have
given me credit for being."

Holmes and I followed them down the lane, and my friend plucked at my
sleeve as we came out.

"I think," said he, "that we shall be of more use in London than in
Norbury."

Not another word did he say of the case until late that night, when he
was turning away, with his lighted candle, for his bedroom.

"Watson," said he, "if it should ever strike you that I am getting a
little over-confident in my powers, or giving less pains to a case
than it deserves, kindly whisper 'Norbury' in my ear, and I shall be
infinitely obliged to you."




Adventure III. The Stock-Broker's Clerk


Shortly after my marriage I had bought a connection in the Paddington
district. Old Mr. Farquhar, from whom I purchased it, had at one time an
excellent general practice; but his age, and an affliction of the nature
of St. Vitus's dance from which he suffered, had very much thinned it.
The public not unnaturally goes on the principle that he who would heal
others must himself be whole, and looks askance at the curative powers
of the man whose own case is beyond the reach of his drugs. Thus as my
predecessor weakened his practice declined, until when I purchased
it from him it had sunk from twelve hundred to little more than three
hundred a year. I had confidence, however, in my own youth and energy,
and was convinced that in a very few years the concern would be as
flourishing as ever.

For three months after taking over the practice I was kept very closely
at work, and saw little of my friend Sherlock Holmes, for I was too busy
to visit Baker Street, and he seldom went anywhere himself save upon
professional business. I was surprised, therefore, when, one morning in
June, as I sat reading the British Medical Journal after breakfast, I
heard a ring at the bell, followed by the high, somewhat strident tones
of my old companion's voice.

"Ah, my dear Watson," said he, striding into the room, "I am very
delighted to see you! I trust that Mrs. Watson has entirely recovered
from all the little excitements connected with our adventure of the Sign
of Four."

"Thank you, we are both very well," said I, shaking him warmly by the
hand.

"And I hope, also," he continued, sitting down in the rocking-chair,
"that the cares of medical practice have not entirely obliterated the
interest which you used to take in our little deductive problems."

"On the contrary," I answered, "it was only last night that I was
looking over my old notes, and classifying some of our past results."

"I trust that you don't consider your collection closed."

"Not at all. I should wish nothing better than to have some more of such
experiences."

"To-day, for example?"

"Yes, to-day, if you like."

"And as far off as Birmingham?"

"Certainly, if you wish it."

"And the practice?"

"I do my neighbor's when he goes. He is always ready to work off the
debt."

"Ha! Nothing could be better," said Holmes, leaning back in his chair
and looking keenly at me from under his half closed lids. "I perceive
that you have been unwell lately. Summer colds are always a little
trying."

"I was confined to the house by a severe chill for three days last week.
I thought, however, that I had cast off every trace of it."

"So you have. You look remarkably robust."

"How, then, did you know of it?"

"My dear fellow, you know my methods."

"You deduced it, then?"

"Certainly."

"And from what?"

"From your slippers."

I glanced down at the new patent leathers which I was wearing. "How on
earth--" I began, but Holmes answered my question before it was asked.

"Your slippers are new," he said. "You could not have had them more than
a few weeks. The soles which you are at this moment presenting to me are
slightly scorched. For a moment I thought they might have got wet and
been burned in the drying. But near the instep there is a small circular
wafer of paper with the shopman's hieroglyphics upon it. Damp would of
course have removed this. You had, then, been sitting with your feet
outstretched to the fire, which a man would hardly do even in so wet a
June as this if he were in his full health."

Like all Holmes's reasoning the thing seemed simplicity itself when it
was once explained. He read the thought upon my features, and his smile
had a tinge of bitterness.

"I am afraid that I rather give myself away when I explain," said he.
"Results without causes are much more impressive. You are ready to come
to Birmingham, then?"

"Certainly. What is the case?"

"You shall hear it all in the train. My client is outside in a
four-wheeler. Can you come at once?"

"In an instant." I scribbled a note to my neighbor, rushed upstairs to
explain the matter to my wife, and joined Holmes upon the door-step.

"Your neighbor is a doctor," said he, nodding at the brass plate.

"Yes; he bought a practice as I did."

"An old-established one?"

"Just the same as mine. Both have been ever since the houses were
built."

"Ah! Then you got hold of the best of the two."

"I think I did. But how do you know?"

"By the steps, my boy. Yours are worn three inches deeper than his. But
this gentleman in the cab is my client, Mr. Hall Pycroft. Allow me to
introduce you to him. Whip your horse up, cabby, for we have only just
time to catch our train."

The man whom I found myself facing was a well built, fresh-complexioned
young fellow, with a frank, honest face and a slight, crisp, yellow
mustache. He wore a very shiny top hat and a neat suit of sober black,
which made him look what he was--a smart young City man, of the class
who have been labeled cockneys, but who give us our crack volunteer
regiments, and who turn out more fine athletes and sportsmen than any
body of men in these islands. His round, ruddy face was naturally full
of cheeriness, but the corners of his mouth seemed to me to be pulled
down in a half-comical distress. It was not, however, until we were
all in a first-class carriage and well started upon our journey to
Birmingham that I was able to learn what the trouble was which had
driven him to Sherlock Holmes.

"We have a clear run here of seventy minutes," Holmes remarked. "I
want you, Mr. Hall Pycroft, to tell my friend your very interesting
experience exactly as you have told it to me, or with more detail if
possible. It will be of use to me to hear the succession of events
again. It is a case, Watson, which may prove to have something in it, or
may prove to have nothing, but which, at least, presents those unusual
and outré features which are as dear to you as they are to me. Now, Mr.
Pycroft, I shall not interrupt you again."

Our young companion looked at me with a twinkle in his eye.

"The worst of the story is," said he, "that I show myself up as such a
confounded fool. Of course it may work out all right, and I don't see
that I could have done otherwise; but if I have lost my crib and get
nothing in exchange I shall feel what a soft Johnnie I have been. I'm
not very good at telling a story, Dr. Watson, but it is like this with
me:

"I used to have a billet at Coxon & Woodhouse's, of Draper's Gardens,
but they were let in early in the spring through the Venezuelan loan,
as no doubt you remember, and came a nasty cropper. I had been with them
five years, and old Coxon gave me a ripping good testimonial when
the smash came, but of course we clerks were all turned adrift, the
twenty-seven of us. I tried here and tried there, but there were lots of
other chaps on the same lay as myself, and it was a perfect frost for a
long time. I had been taking three pounds a week at Coxon's, and I had
saved about seventy of them, but I soon worked my way through that and
out at the other end. I was fairly at the end of my tether at last,
and could hardly find the stamps to answer the advertisements or the
envelopes to stick them to. I had worn out my boots paddling up office
stairs, and I seemed just as far from getting a billet as ever.

"At last I saw a vacancy at Mawson & Williams's, the great stock-broking
firm in Lombard Street. I dare say E. C. Is not much in your line, but
I can tell you that this is about the richest house in London.
The advertisement was to be answered by letter only. I sent in my
testimonial and application, but without the least hope of getting it.
Back came an answer by return, saying that if I would appear next Monday
I might take over my new duties at once, provided that my appearance was
satisfactory. No one knows how these things are worked. Some people say
that the manager just plunges his hand into the heap and takes the first
that comes. Anyhow it was my innings that time, and I don't ever wish to
feel better pleased. The screw was a pound a week rise, and the duties
just about the same as at Coxon's.

"And now I come to the queer part of the business. I was in diggings out
Hampstead way, 17 Potter's Terrace. Well, I was sitting doing a smoke
that very evening after I had been promised the appointment, when up
came my landlady with a card which had 'Arthur Pinner, Financial Agent,'
printed upon it. I had never heard the name before and could not imagine
what he wanted with me; but, of course, I asked her to show him up. In
he walked, a middle-sized, dark-haired, dark-eyed, black-bearded man,
with a touch of the Sheeny about his nose. He had a brisk kind of way
with him and spoke sharply, like a man who knew the value of time."

"'Mr. Hall Pycroft, I believe?'" said he.

"'Yes, sir,' I answered, pushing a chair towards him.

"'Lately engaged at Coxon & Woodhouse's?'

"'Yes, sir.'

"'And now on the staff of Mawson's.'

"'Quite so.'

"'Well,' said he, 'the fact is that I have heard some really
extraordinary stories about your financial ability. You remember Parker,
who used to be Coxon's manager? He can never say enough about it.'

"Of course I was pleased to hear this. I had always been pretty sharp in
the office, but I had never dreamed that I was talked about in the City
in this fashion.

"'You have a good memory?' said he.

"'Pretty fair,' I answered, modestly.

"'Have you kept in touch with the market while you have been out of
work?' he asked.

"'Yes. I read the stock exchange list every morning.'

"'Now that shows real application!' he cried. 'That is the way to
prosper! You won't mind my testing you, will you? Let me see. How are
Ayrshires?'

"'A hundred and six and a quarter to a hundred and five and
seven-eighths.'

"'And New Zealand consolidated?'

"'A hundred and four.

"'And British Broken Hills?'

"'Seven to seven-and-six.'

"'Wonderful!' he cried, with his hands up. 'This quite fits in with all
that I had heard. My boy, my boy, you are very much too good to be a
clerk at Mawson's!'

"This outburst rather astonished me, as you can think. 'Well,' said I,
'other people don't think quite so much of me as you seem to do, Mr.
Pinner. I had a hard enough fight to get this berth, and I am very glad
to have it.'

"'Pooh, man; you should soar above it. You are not in your true sphere.
Now, I'll tell you how it stands with me. What I have to offer is little
enough when measured by your ability, but when compared with Mawson's,
it's light to dark. Let me see. When do you go to Mawson's?'

"'On Monday.'

"'Ha, ha! I think I would risk a little sporting flutter that you don't
go there at all.'

"'Not go to Mawson's?'

"'No, sir. By that day you will be the business manager of the
Franco-Midland Hardware Company, Limited, with a hundred and thirty-four
branches in the towns and villages of France, not counting one in
Brussels and one in San Remo.'

"This took my breath away. 'I never heard of it,' said I.

"'Very likely not. It has been kept very quiet, for the capital was all
privately subscribed, and it's too good a thing to let the public
into. My brother, Harry Pinner, is promoter, and joins the board after
allotment as managing director. He knew I was in the swim down here, and
asked me to pick up a good man cheap. A young, pushing man with plenty
of snap about him. Parker spoke of you, and that brought me here
to-night. We can only offer you a beggarly five hundred to start with.'

"'Five hundred a year!' I shouted.

"'Only that at the beginning; but you are to have an overriding
commission of one per cent on all business done by your agents, and you
may take my word for it that this will come to more than your salary.'

"'But I know nothing about hardware.'

"'Tut, my boy; you know about figures.'

"My head buzzed, and I could hardly sit still in my chair. But suddenly
a little chill of doubt came upon me.

"'I must be frank with you,' said I. 'Mawson only gives me two hundred,
but Mawson is safe. Now, really, I know so little about your company
that--'

"'Ah, smart, smart!' he cried, in a kind of ecstasy of delight. 'You
are the very man for us. You are not to be talked over, and quite right,
too. Now, here's a note for a hundred pounds, and if you think that we
can do business you may just slip it into your pocket as an advance upon
your salary.'

"'That is very handsome,' said I. 'When should I take over my new
duties?'

"'Be in Birmingham to-morrow at one,' said he. 'I have a note in my
pocket here which you will take to my brother. You will find him at
126b Corporation Street, where the temporary offices of the company
are situated. Of course he must confirm your engagement, but between
ourselves it will be all right.'

"'Really, I hardly know how to express my gratitude, Mr. Pinner,' said
I.

"'Not at all, my boy. You have only got your deserts. There are one or
two small things--mere formalities--which I must arrange with you.
You have a bit of paper beside you there. Kindly write upon it "I am
perfectly willing to act as business manager to the Franco-Midland
Hardware Company, Limited, at a minimum salary of L500."'

"I did as he asked, and he put the paper in his pocket.

"'There is one other detail,' said he. 'What do you intend to do about
Mawson's?'

"I had forgotten all about Mawson's in my joy. 'I'll write and resign,'
said I.

"'Precisely what I don't want you to do. I had a row over you with
Mawson's manager. I had gone up to ask him about you, and he was very
offensive; accused me of coaxing you away from the service of the firm,
and that sort of thing. At last I fairly lost my temper. "If you want
good men you should pay them a good price," said I.'

"'He would rather have our small price than your big one,' said he.

"'I'll lay you a fiver,' said I, 'that when he has my offer you'll never
so much as hear from him again.'

"'Done!' said he. 'We picked him out of the gutter, and he won't leave
us so easily.' Those were his very words."

"'The impudent scoundrel!' I cried. 'I've never so much as seen him in
my life. Why should I consider him in any way? I shall certainly not
write if you would rather I didn't.'

"'Good! That's a promise,' said he, rising from his chair. 'Well, I'm
delighted to have got so good a man for my brother. Here's your advance
of a hundred pounds, and here is the letter. Make a note of the address,
126b Corporation Street, and remember that one o'clock to-morrow is
your appointment. Good-night; and may you have all the fortune that you
deserve!'

"That's just about all that passed between us, as near as I can
remember. You can imagine, Dr. Watson, how pleased I was at such an
extraordinary bit of good fortune. I sat up half the night hugging
myself over it, and next day I was off to Birmingham in a train that
would take me in plenty time for my appointment. I took my things to
a hotel in New Street, and then I made my way to the address which had
been given me.

"It was a quarter of an hour before my time, but I thought that would
make no difference. 126b was a passage between two large shops, which
led to a winding stone stair, from which there were many flats, let as
offices to companies or professional men. The names of the occupants
were painted at the bottom on the wall, but there was no such name as
the Franco-Midland Hardware Company, Limited. I stood for a few minutes
with my heart in my boots, wondering whether the whole thing was an
elaborate hoax or not, when up came a man and addressed me. He was very
like the chap I had seen the night before, the same figure and voice,
but he was clean shaven and his hair was lighter.

"'Are you Mr. Hall Pycroft?' he asked.

"'Yes,' said I.

"'Oh! I was expecting you, but you are a trifle before your time. I had
a note from my brother this morning in which he sang your praises very
loudly.'

"'I was just looking for the offices when you came.

"'We have not got our name up yet, for we only secured these temporary
premises last week. Come up with me, and we will talk the matter over.'

"I followed him to the top of a very lofty stair, and there, right under
the slates, were a couple of empty, dusty little rooms, uncarpeted and
uncurtained, into which he led me. I had thought of a great office with
shining tables and rows of clerks, such as I was used to, and I dare say
I stared rather straight at the two deal chairs and one little table,
which, with a ledger and a waste paper basket, made up the whole
furniture.

"'Don't be disheartened, Mr. Pycroft,' said my new acquaintance, seeing
the length of my face. 'Rome was not built in a day, and we have lots of
money at our backs, though we don't cut much dash yet in offices. Pray
sit down, and let me have your letter.'

"I gave it to him, and he read it over very carefully.

"'You seem to have made a vast impression upon my brother Arthur,' said
he; 'and I know that he is a pretty shrewd judge. He swears by London,
you know; and I by Birmingham; but this time I shall follow his advice.
Pray consider yourself definitely engaged."

"'What are my duties?' I asked.

"'You will eventually manage the great depot in Paris, which will pour
a flood of English crockery into the shops of a hundred and thirty-four
agents in France. The purchase will be completed in a week, and
meanwhile you will remain in Birmingham and make yourself useful.'

"'How?'

"For answer, he took a big red book out of a drawer.

"'This is a directory of Paris,' said he, 'with the trades after the
names of the people. I want you to take it home with you, and to mark
off all the hardware sellers, with their addresses. It would be of the
greatest use to me to have them.'

"'Surely there are classified lists?' I suggested.

"'Not reliable ones. Their system is different from ours. Stick at it,
and let me have the lists by Monday, at twelve. Good-day, Mr. Pycroft.
If you continue to show zeal and intelligence you will find the company
a good master.'

"I went back to the hotel with the big book under my arm, and with very
conflicting feelings in my breast. On the one hand, I was definitely
engaged and had a hundred pounds in my pocket; on the other, the look
of the offices, the absence of name on the wall, and other of the points
which would strike a business man had left a bad impression as to the
position of my employers. However, come what might, I had my money, so I
settled down to my task. All Sunday I was kept hard at work, and yet by
Monday I had only got as far as H. I went round to my employer, found
him in the same dismantled kind of room, and was told to keep at
it until Wednesday, and then come again. On Wednesday it was still
unfinished, so I hammered away until Friday--that is, yesterday. Then I
brought it round to Mr. Harry Pinner.

"'Thank you very much,' said he; 'I fear that I underrated the
difficulty of the task. This list will be of very material assistance to
me.'

"'It took some time,' said I.

"'And now,' said he, 'I want you to make a list of the furniture shops,
for they all sell crockery.'

"'Very good.'

"'And you can come up to-morrow evening, at seven, and let me know how
you are getting on. Don't overwork yourself. A couple of hours at Day's
Music Hall in the evening would do you no harm after your labors.' He
laughed as he spoke, and I saw with a thrill that his second tooth upon
the left-hand side had been very badly stuffed with gold."


Sherlock Holmes rubbed his hands with delight, and I stared with
astonishment at our client.

"You may well look surprised, Dr. Watson; but it is this way," said he:
"When I was speaking to the other chap in London, at the time that he
laughed at my not going to Mawson's, I happened to notice that his tooth
was stuffed in this very identical fashion. The glint of the gold in
each case caught my eye, you see. When I put that with the voice and
figure being the same, and only those things altered which might be
changed by a razor or a wig, I could not doubt that it was the same man.
Of course you expect two brothers to be alike, but not that they should
have the same tooth stuffed in the same way. He bowed me out, and I
found myself in the street, hardly knowing whether I was on my head or
my heels. Back I went to my hotel, put my head in a basin of cold water,
and tried to think it out. Why had he sent me from London to Birmingham?
Why had he got there before me? And why had he written a letter from
himself to himself? It was altogether too much for me, and I could make
no sense of it. And then suddenly it struck me that what was dark to me
might be very light to Mr. Sherlock Holmes. I had just time to get up to
town by the night train to see him this morning, and to bring you both
back with me to Birmingham."

There was a pause after the stock-broker's clerk had concluded his
surprising experience. Then Sherlock Holmes cocked his eye at me,
leaning back on the cushions with a pleased and yet critical face, like
a connoisseur who has just taken his first sip of a comet vintage.

"Rather fine, Watson, is it not?" said he. "There are points in it which
please me. I think that you will agree with me that an interview with
Mr. Arthur Harry Pinner in the temporary offices of the Franco-Midland
Hardware Company, Limited, would be a rather interesting experience for
both of us."

"But how can we do it?" I asked.

"Oh, easily enough," said Hall Pycroft, cheerily. "You are two friends
of mine who are in want of a billet, and what could be more natural than
that I should bring you both round to the managing director?"

"Quite so, of course," said Holmes. "I should like to have a look at
the gentleman, and see if I can make anything of his little game.
What qualities have you, my friend, which would make your services
so valuable? or is it possible that--" He began biting his nails and
staring blankly out of the window, and we hardly drew another word from
him until we were in New Street.

At seven o'clock that evening we were walking, the three of us, down
Corporation Street to the company's offices.

"It is no use our being at all before our time," said our client. "He
only comes there to see me, apparently, for the place is deserted up to
the very hour he names."

"That is suggestive," remarked Holmes.

"By Jove, I told you so!" cried the clerk. "That's he walking ahead of
us there."

He pointed to a smallish, dark, well-dressed man who was bustling along
the other side of the road. As we watched him he looked across at a boy
who was bawling out the latest edition of the evening paper, and running
over among the cabs and busses, he bought one from him. Then, clutching
it in his hand, he vanished through a door-way.

"There he goes!" cried Hall Pycroft. "These are the company's offices
into which he has gone. Come with me, and I'll fix it up as easily as
possible."

Following his lead, we ascended five stories, until we found ourselves
outside a half-opened door, at which our client tapped. A voice within
bade us enter, and we entered a bare, unfurnished room such as Hall
Pycroft had described. At the single table sat the man whom we had seen
in the street, with his evening paper spread out in front of him, and as
he looked up at us it seemed to me that I had never looked upon a face
which bore such marks of grief, and of something beyond grief--of a
horror such as comes to few men in a lifetime. His brow glistened with
perspiration, his cheeks were of the dull, dead white of a fish's belly,
and his eyes were wild and staring. He looked at his clerk as though he
failed to recognize him, and I could see by the astonishment depicted
upon our conductor's face that this was by no means the usual appearance
of his employer.

"You look ill, Mr. Pinner!" he exclaimed.

"Yes, I am not very well," answered the other, making obvious efforts
to pull himself together, and licking his dry lips before he spoke. "Who
are these gentlemen whom you have brought with you?"

"One is Mr. Harris, of Bermondsey, and the other is Mr. Price, of this
town," said our clerk, glibly. "They are friends of mine and gentlemen
of experience, but they have been out of a place for some little time,
and they hoped that perhaps you might find an opening for them in the
company's employment."

"Very possibly! Very possibly!" cried Mr. Pinner with a ghastly smile.
"Yes, I have no doubt that we shall be able to do something for you.
What is your particular line, Mr. Harris?"

"I am an accountant," said Holmes.

"Ah yes, we shall want something of the sort. And you, Mr. Price?"

"A clerk," said I.

"I have every hope that the company may accommodate you. I will let you
know about it as soon as we come to any conclusion. And now I beg that
you will go. For God's sake leave me to myself!"

These last words were shot out of him, as though the constraint which
he was evidently setting upon himself had suddenly and utterly burst
asunder. Holmes and I glanced at each other, and Hall Pycroft took a
step towards the table.

"You forget, Mr. Pinner, that I am here by appointment to receive some
directions from you," said he.

"Certainly, Mr. Pycroft, certainly," the other resumed in a calmer tone.
"You may wait here a moment; and there is no reason why your friends
should not wait with you. I will be entirely at your service in three
minutes, if I might trespass upon your patience so far." He rose with a
very courteous air, and, bowing to us, he passed out through a door at
the farther end of the room, which he closed behind him.

"What now?" whispered Holmes. "Is he giving us the slip?"

"Impossible," answered Pycroft.

"Why so?"

"That door leads into an inner room."

"There is no exit?"

"None."

"Is it furnished?"

"It was empty yesterday."

"Then what on earth can he be doing? There is something which I don't
understand in this manner. If ever a man was three parts mad with
terror, that man's name is Pinner. What can have put the shivers on
him?"

"He suspects that we are detectives," I suggested.

"That's it," cried Pycroft.

Holmes shook his head. "He did not turn pale. He was pale when we
entered the room," said he. "It is just possible that--"

His words were interrupted by a sharp rat-tat from the direction of the
inner door.

"What the deuce is he knocking at his own door for?" cried the clerk.

Again and much louder came the rat-tat-tat. We all gazed expectantly at
the closed door. Glancing at Holmes, I saw his face turn rigid, and he
leaned forward in intense excitement. Then suddenly came a low guggling,
gargling sound, and a brisk drumming upon woodwork. Holmes sprang
frantically across the room and pushed at the door. It was fastened on
the inner side. Following his example, we threw ourselves upon it with
all our weight. One hinge snapped, then the other, and down came the
door with a crash. Rushing over it, we found ourselves in the inner
room. It was empty.

But it was only for a moment that we were at fault. At one corner, the
corner nearest the room which we had left, there was a second door.
Holmes sprang to it and pulled it open. A coat and waistcoat were lying
on the floor, and from a hook behind the door, with his own braces
round his neck, was hanging the managing director of the Franco-Midland
Hardware Company. His knees were drawn up, his head hung at a dreadful
angle to his body, and the clatter of his heels against the door made
the noise which had broken in upon our conversation. In an instant I
had caught him round the waist, and held him up while Holmes and Pycroft
untied the elastic bands which had disappeared between the livid creases
of skin. Then we carried him into the other room, where he lay with
a clay-colored face, puffing his purple lips in and out with every
breath--a dreadful wreck of all that he had been but five minutes
before.

"What do you think of him, Watson?" asked Holmes.

I stooped over him and examined him. His pulse was feeble and
intermittent, but his breathing grew longer, and there was a little
shivering of his eyelids, which showed a thin white slit of ball
beneath.

"It has been touch and go with him," said I, "but he'll live now. Just
open that window, and hand me the water carafe." I undid his collar,
poured the cold water over his face, and raised and sank his arms until
he drew a long, natural breath. "It's only a question of time now," said
I, as I turned away from him.

Holmes stood by the table, with his hands deep in his trouser's pockets
and his chin upon his breast.

"I suppose we ought to call the police in now," said he. "And yet I
confess that I'd like to give them a complete case when they come."

"It's a blessed mystery to me," cried Pycroft, scratching his head.
"Whatever they wanted to bring me all the way up here for, and then--"

"Pooh! All that is clear enough," said Holmes impatiently. "It is this
last sudden move."

"You understand the rest, then?"

"I think that it is fairly obvious. What do you say, Watson?"

I shrugged my shoulders. "I must confess that I am out of my depths,"
said I.

"Oh surely if you consider the events at first they can only point to
one conclusion."

"What do you make of them?"

"Well, the whole thing hinges upon two points. The first is the making
of Pycroft write a declaration by which he entered the service of this
preposterous company. Do you not see how very suggestive that is?"

"I am afraid I miss the point."

"Well, why did they want him to do it? Not as a business matter, for
these arrangements are usually verbal, and there was no earthly business
reason why this should be an exception. Don't you see, my young friend,
that they were very anxious to obtain a specimen of your handwriting,
and had no other way of doing it?"

"And why?"

"Quite so. Why? When we answer that we have made some progress with our
little problem. Why? There can be only one adequate reason. Some one
wanted to learn to imitate your writing, and had to procure a specimen
of it first. And now if we pass on to the second point we find that each
throws light upon the other. That point is the request made by Pinner
that you should not resign your place, but should leave the manager of
this important business in the full expectation that a Mr. Hall Pycroft,
whom he had never seen, was about to enter the office upon the Monday
morning."

"My God!" cried our client, "what a blind beetle I have been!"

"Now you see the point about the handwriting. Suppose that some one
turned up in your place who wrote a completely different hand from that
in which you had applied for the vacancy, of course the game would have
been up. But in the interval the rogue had learned to imitate you,
and his position was therefore secure, as I presume that nobody in the
office had ever set eyes upon you."

"Not a soul," groaned Hall Pycroft.

"Very good. Of course it was of the utmost importance to prevent you
from thinking better of it, and also to keep you from coming into
contact with any one who might tell you that your double was at work
in Mawson's office. Therefore they gave you a handsome advance on your
salary, and ran you off to the Midlands, where they gave you enough work
to do to prevent your going to London, where you might have burst their
little game up. That is all plain enough."

"But why should this man pretend to be his own brother?"

"Well, that is pretty clear also. There are evidently only two of them
in it. The other is impersonating you at the office. This one acted
as your engager, and then found that he could not find you an employer
without admitting a third person into his plot. That he was most
unwilling to do. He changed his appearance as far as he could, and
trusted that the likeness, which you could not fail to observe, would be
put down to a family resemblance. But for the happy chance of the gold
stuffing, your suspicions would probably never have been aroused."

Hall Pycroft shook his clinched hands in the air. "Good Lord!" he cried,
"while I have been fooled in this way, what has this other Hall Pycroft
been doing at Mawson's? What should we do, Mr. Holmes? Tell me what to
do."

"We must wire to Mawson's."

"They shut at twelve on Saturdays."

"Never mind. There may be some door-keeper or attendant--"

"Ah yes, they keep a permanent guard there on account of the value of
the securities that they hold. I remember hearing it talked of in the
City."

"Very good; we shall wire to him, and see if all is well, and if a clerk
of your name is working there. That is clear enough; but what is not so
clear is why at sight of us one of the rogues should instantly walk out
of the room and hang himself."

"The paper!" croaked a voice behind us. The man was sitting up, blanched
and ghastly, with returning reason in his eyes, and hands which rubbed
nervously at the broad red band which still encircled his throat.

"The paper! Of course!" yelled Holmes, in a paroxysm of excitement.
"Idiot that I was! I thought so much of our visit that the paper never
entered my head for an instant. To be sure, the secret must be there."
He flattened it out upon the table, and a cry of triumph burst from his
lips. "Look at this, Watson," he cried. "It is a London paper, an early
edition of the Evening Standard. Here is what we want. Look at the
headlines: 'Crime in the City. Murder at Mawson & Williams's. Gigantic
attempted Robbery. Capture of the Criminal.' Here, Watson, we are all
equally anxious to hear it, so kindly read it aloud to us."

It appeared from its position in the paper to have been the one event of
importance in town, and the account of it ran in this way:

"A desperate attempt at robbery, culminating in the death of one man and
the capture of the criminal, occurred this afternoon in the City. For
some time back Mawson & Williams, the famous financial house, have been
the guardians of securities which amount in the aggregate to a sum of
considerably over a million sterling. So conscious was the manager of
the responsibility which devolved upon him in consequence of the great
interests at stake that safes of the very latest construction have
been employed, and an armed watchman has been left day and night in the
building. It appears that last week a new clerk named Hall Pycroft was
engaged by the firm. This person appears to have been none other that
Beddington, the famous forger and cracksman, who, with his brother, had
only recently emerged from a five years' spell of penal servitude. By
some means, which are not yet clear, he succeeded in winning, under a
false name, this official position in the office, which he utilized in
order to obtain moulding of various locks, and a thorough knowledge of
the position of the strong room and the safes.

"It is customary at Mawson's for the clerks to leave at midday on
Saturday. Sergeant Tuson, of the City Police, was somewhat surprised,
therefore to see a gentleman with a carpet bag come down the steps at
twenty minutes past one. His suspicions being aroused, the sergeant
followed the man, and with the aid of Constable Pollock succeeded, after
a most desperate resistance, in arresting him. It was at once clear
that a daring and gigantic robbery had been committed. Nearly a hundred
thousand pounds' worth of American railway bonds, with a large amount
of scrip in mines and other companies, was discovered in the bag. On
examining the premises the body of the unfortunate watchman was found
doubled up and thrust into the largest of the safes, where it would not
have been discovered until Monday morning had it not been for the prompt
action of Sergeant Tuson. The man's skull had been shattered by a
blow from a poker delivered from behind. There could be no doubt
that Beddington had obtained entrance by pretending that he had left
something behind him, and having murdered the watchman, rapidly rifled
the large safe, and then made off with his booty. His brother, who
usually works with him, has not appeared in this job as far as can
at present be ascertained, although the police are making energetic
inquiries as to his whereabouts."

"Well, we may save the police some little trouble in that direction,"
said Holmes, glancing at the haggard figure huddled up by the window.
"Human nature is a strange mixture, Watson. You see that even a villain
and murderer can inspire such affection that his brother turns to
suicide when he learns that his neck is forfeited. However, we have
no choice as to our action. The doctor and I will remain on guard, Mr.
Pycroft, if you will have the kindness to step out for the police."




Adventure IV. The "_Gloria Scott_"


"I have some papers here," said my friend Sherlock Holmes, as we sat
one winter's night on either side of the fire, "which I really think,
Watson, that it would be worth your while to glance over. These are the
documents in the extraordinary case of the Gloria Scott, and this is the
message which struck Justice of the Peace Trevor dead with horror when
he read it."

He had picked from a drawer a little tarnished cylinder, and, undoing
the tape, he handed me a short note scrawled upon a half-sheet of
slate-gray paper.

"The supply of game for London is going steadily up," it ran.
"Head-keeper Hudson, we believe, has been now told to receive all orders
for fly-paper and for preservation of your hen-pheasant's life."

As I glanced up from reading this enigmatical message, I saw Holmes
chuckling at the expression upon my face.

"You look a little bewildered," said he.

"I cannot see how such a message as this could inspire horror. It seems
to me to be rather grotesque than otherwise."

"Very likely. Yet the fact remains that the reader, who was a fine,
robust old man, was knocked clean down by it as if it had been the butt
end of a pistol."

"You arouse my curiosity," said I. "But why did you say just now that
there were very particular reasons why I should study this case?"

"Because it was the first in which I was ever engaged."

I had often endeavored to elicit from my companion what had first turned
his mind in the direction of criminal research, but had never caught him
before in a communicative humor. Now he sat forward in this arm-chair
and spread out the documents upon his knees. Then he lit his pipe and
sat for some time smoking and turning them over.

"You never heard me talk of Victor Trevor?" he asked. "He was the only
friend I made during the two years I was at college. I was never a very
sociable fellow, Watson, always rather fond of moping in my rooms and
working out my own little methods of thought, so that I never mixed
much with the men of my year. Bar fencing and boxing I had few athletic
tastes, and then my line of study was quite distinct from that of the
other fellows, so that we had no points of contact at all. Trevor was
the only man I knew, and that only through the accident of his bull
terrier freezing on to my ankle one morning as I went down to chapel.

"It was a prosaic way of forming a friendship, but it was effective.
I was laid by the heels for ten days, but Trevor used to come in to
inquire after me. At first it was only a minute's chat, but soon his
visits lengthened, and before the end of the term we were close friends.
He was a hearty, full-blooded fellow, full of spirits and energy,
the very opposite to me in most respects, but we had some subjects
in common, and it was a bond of union when I found that he was as
friendless as I. Finally, he invited me down to his father's place at
Donnithorpe, in Norfolk, and I accepted his hospitality for a month of
the long vacation.

"Old Trevor was evidently a man of some wealth and consideration, a
J.P., and a landed proprietor. Donnithorpe is a little hamlet just to
the north of Langmere, in the country of the Broads. The house was
an old-fashioned, wide-spread, oak-beamed brick building, with a fine
lime-lined avenue leading up to it. There was excellent wild-duck
shooting in the fens, remarkably good fishing, a small but select
library, taken over, as I understood, from a former occupant, and a
tolerable cook, so that he would be a fastidious man who could not put
in a pleasant month there.

"Trevor senior was a widower, and my friend his only son.

"There had been a daughter, I heard, but she had died of diphtheria
while on a visit to Birmingham. The father interested me extremely.
He was a man of little culture, but with a considerable amount of rude
strength, both physically and mentally. He knew hardly any books, but
he had traveled far, had seen much of the world. And had remembered
all that he had learned. In person he was a thick-set, burly man with
a shock of grizzled hair, a brown, weather-beaten face, and blue eyes
which were keen to the verge of fierceness. Yet he had a reputation for
kindness and charity on the country-side, and was noted for the leniency
of his sentences from the bench.

"One evening, shortly after my arrival, we were sitting over a glass of
port after dinner, when young Trevor began to talk about those habits
of observation and inference which I had already formed into a system,
although I had not yet appreciated the part which they were to play in
my life. The old man evidently thought that his son was exaggerating in
his description of one or two trivial feats which I had performed.

"'Come, now, Mr. Holmes,' said he, laughing good-humoredly. 'I'm an
excellent subject, if you can deduce anything from me.'

"'I fear there is not very much,' I answered; 'I might suggest that
you have gone about in fear of some personal attack within the last
twelvemonth.'

"The laugh faded from his lips, and he stared at me in great surprise.

"'Well, that's true enough,' said he. 'You know, Victor,' turning to his
son, 'when we broke up that poaching gang they swore to knife us, and
Sir Edward Holly has actually been attacked. I've always been on my
guard since then, though I have no idea how you know it.'

"'You have a very handsome stick,' I answered. 'By the inscription I
observed that you had not had it more than a year. But you have taken
some pains to bore the head of it and pour melted lead into the hole so
as to make it a formidable weapon. I argued that you would not take such
precautions unless you had some danger to fear.'

"'Anything else?' he asked, smiling.

"'You have boxed a good deal in your youth.'

"'Right again. How did you know it? Is my nose knocked a little out of
the straight?'

"'No,' said I. 'It is your ears. They have the peculiar flattening and
thickening which marks the boxing man.'

"'Anything else?'

"'You have done a good deal of digging by your callosities.'

"'Made all my money at the gold fields.'

"'You have been in New Zealand.'

"'Right again.'

"'You have visited Japan.'

"'Quite true.'

"'And you have been most intimately associated with some one whose
initials were J. A., and whom you afterwards were eager to entirely
forget.'

"Mr. Trevor stood slowly up, fixed his large blue eyes upon me with a
strange wild stare, and then pitched forward, with his face among the
nutshells which strewed the cloth, in a dead faint.

"You can imagine, Watson, how shocked both his son and I were. His
attack did not last long, however, for when we undid his collar, and
sprinkled the water from one of the finger-glasses over his face, he
gave a gasp or two and sat up.

"'Ah, boys,' said he, forcing a smile, 'I hope I haven't frightened you.
Strong as I look, there is a weak place in my heart, and it does not
take much to knock me over. I don't know how you manage this, Mr.
Holmes, but it seems to me that all the detectives of fact and of fancy
would be children in your hands. That's your line of life, sir, and you
may take the word of a man who has seen something of the world.'

"And that recommendation, with the exaggerated estimate of my ability
with which he prefaced it, was, if you will believe me, Watson, the very
first thing which ever made me feel that a profession might be made
out of what had up to that time been the merest hobby. At the moment,
however, I was too much concerned at the sudden illness of my host to
think of anything else.

"'I hope that I have said nothing to pain you?' said I.

"'Well, you certainly touched upon rather a tender point. Might I ask
how you know, and how much you know?' He spoke now in a half-jesting
fashion, but a look of terror still lurked at the back of his eyes.

"'It is simplicity itself,' said I. 'When you bared your arm to draw
that fish into the boat I saw that J. A. Had been tattooed in the bend
of the elbow. The letters were still legible, but it was perfectly clear
from their blurred appearance, and from the staining of the skin round
them, that efforts had been made to obliterate them. It was obvious,
then, that those initials had once been very familiar to you, and that
you had afterwards wished to forget them.'

"What an eye you have!" he cried, with a sigh of relief. 'It is just as
you say. But we won't talk of it. Of all ghosts the ghosts of our old
lovers are the worst. Come into the billiard-room and have a quiet
cigar.'


"From that day, amid all his cordiality, there was always a touch of
suspicion in Mr. Trevor's manner towards me. Even his son remarked it.
'You've given the governor such a turn,' said he, 'that he'll never be
sure again of what you know and what you don't know.' He did not mean
to show it, I am sure, but it was so strongly in his mind that it peeped
out at every action. At last I became so convinced that I was causing
him uneasiness that I drew my visit to a close. On the very day,
however, before I left, and incident occurred which proved in the sequel
to be of importance.

"We were sitting out upon the lawn on garden chairs, the three of us,
basking in the sun and admiring the view across the Broads, when a maid
came out to say that there was a man at the door who wanted to see Mr.
Trevor.

"'What is his name?' asked my host.

"'He would not give any.'

"'What does he want, then?'

"'He says that you know him, and that he only wants a moment's
conversation.'

"'Show him round here.' An instant afterwards there appeared a little
wizened fellow with a cringing manner and a shambling style of
walking. He wore an open jacket, with a splotch of tar on the sleeve,
a red-and-black check shirt, dungaree trousers, and heavy boots badly
worn. His face was thin and brown and crafty, with a perpetual smile
upon it, which showed an irregular line of yellow teeth, and his
crinkled hands were half closed in a way that is distinctive of sailors.
As he came slouching across the lawn I heard Mr. Trevor make a sort of
hiccoughing noise in his throat, and jumping out of his chair, he ran
into the house. He was back in a moment, and I smelt a strong reek of
brandy as he passed me.

"'Well, my man,' said he. 'What can I do for you?'

"The sailor stood looking at him with puckered eyes, and with the same
loose-lipped smile upon his face.

"'You don't know me?' he asked.

"'Why, dear me, it is surely Hudson,' said Mr. Trevor in a tone of
surprise.

"'Hudson it is, sir,' said the seaman. 'Why, it's thirty year and more
since I saw you last. Here you are in your house, and me still picking
my salt meat out of the harness cask.'

"'Tut, you will find that I have not forgotten old times,' cried Mr.
Trevor, and, walking towards the sailor, he said something in a low
voice. 'Go into the kitchen,' he continued out loud, 'and you will get
food and drink. I have no doubt that I shall find you a situation.'

"'Thank you, sir,' said the seaman, touching his fore-lock. 'I'm just
off a two-yearer in an eight-knot tramp, short-handed at that, and I
wants a rest. I thought I'd get it either with Mr. Beddoes or with you.'

"'Ah!' cried Trevor. 'You know where Mr. Beddoes is?'

"'Bless you, sir, I know where all my old friends are,' said the
fellow with a sinister smile, and he slouched off after the maid to the
kitchen. Mr. Trevor mumbled something to us about having been shipmate
with the man when he was going back to the diggings, and then, leaving
us on the lawn, he went indoors. An hour later, when we entered the
house, we found him stretched dead drunk upon the dining-room sofa. The
whole incident left a most ugly impression upon my mind, and I was
not sorry next day to leave Donnithorpe behind me, for I felt that my
presence must be a source of embarrassment to my friend.

"All this occurred during the first month of the long vacation. I went
up to my London rooms, where I spent seven weeks working out a few
experiments in organic chemistry. One day, however, when the autumn was
far advanced and the vacation drawing to a close, I received a telegram
from my friend imploring me to return to Donnithorpe, and saying that
he was in great need of my advice and assistance. Of course I dropped
everything and set out for the North once more.

"He met me with the dog-cart at the station, and I saw at a glance that
the last two months had been very trying ones for him. He had grown thin
and careworn, and had lost the loud, cheery manner for which he had been
remarkable.

"'The governor is dying,' were the first words he said.

"'Impossible!' I cried. 'What is the matter?'

"'Apoplexy. Nervous shock, He's been on the verge all day. I doubt if we
shall find him alive.'

"I was, as you may think, Watson, horrified at this unexpected news.

"'What has caused it?' I asked.

"'Ah, that is the point. Jump in and we can talk it over while we drive.
You remember that fellow who came upon the evening before you left us?'

"'Perfectly.'

"'Do you know who it was that we let into the house that day?'

"'I have no idea.'

"'It was the devil, Holmes,' he cried.

"I stared at him in astonishment.

"'Yes, it was the devil himself. We have not had a peaceful hour
since--not one. The governor has never held up his head from that
evening, and now the life has been crushed out of him and his heart
broken, all through this accursed Hudson.'

"'What power had he, then?'

"'Ah, that is what I would give so much to know. The kindly, charitable,
good old governor--how could he have fallen into the clutches of such a
ruffian! But I am so glad that you have come, Holmes. I trust very much
to your judgment and discretion, and I know that you will advise me for
the best.'

"We were dashing along the smooth white country road, with the long
stretch of the Broads in front of us glimmering in the red light of the
setting sun. From a grove upon our left I could already see the high
chimneys and the flag-staff which marked the squire's dwelling.

"'My father made the fellow gardener,' said my companion, 'and then, as
that did not satisfy him, he was promoted to be butler. The house seemed
to be at his mercy, and he wandered about and did what he chose in it.
The maids complained of his drunken habits and his vile language. The
dad raised their wages all round to recompense them for the annoyance.
The fellow would take the boat and my father's best gun and treat
himself to little shooting trips. And all this with such a sneering,
leering, insolent face that I would have knocked him down twenty times
over if he had been a man of my own age. I tell you, Holmes, I have
had to keep a tight hold upon myself all this time; and now I am asking
myself whether, if I had let myself go a little more, I might not have
been a wiser man.

"'Well, matters went from bad to worse with us, and this animal Hudson
became more and more intrusive, until at last, on making some insolent
reply to my father in my presence one day, I took him by the shoulders
and turned him out of the room. He slunk away with a livid face and two
venomous eyes which uttered more threats than his tongue could do. I
don't know what passed between the poor dad and him after that, but the
dad came to me next day and asked me whether I would mind apologizing to
Hudson. I refused, as you can imagine, and asked my father how he
could allow such a wretch to take such liberties with himself and his
household.

"'"Ah, my boy," said he, "it is all very well to talk, but you don't
know how I am placed. But you shall know, Victor. I'll see that you
shall know, come what may. You wouldn't believe harm of your poor old
father, would you, lad?" He was very much moved, and shut himself up
in the study all day, where I could see through the window that he was
writing busily.

"'That evening there came what seemed to me to be a grand release,
for Hudson told us that he was going to leave us. He walked into the
dining-room as we sat after dinner, and announced his intention in the
thick voice of a half-drunken man.

"'"I've had enough of Norfolk," said he. "I'll run down to Mr. Beddoes
in Hampshire. He'll be as glad to see me as you were, I dare say."

"'"You're not going away in an unkind spirit, Hudson, I hope," said my
father, with a tameness which made my blood boil.

"'"I've not had my 'pology," said he sulkily, glancing in my direction.

"'"Victor, you will acknowledge that you have used this worthy fellow
rather roughly," said the dad, turning to me.

"'"On the contrary, I think that we have both shown extraordinary
patience towards him," I answered.

"'"Oh, you do, do you?" he snarls. "Very good, mate. We'll see about
that!"

"'He slouched out of the room, and half an hour afterwards left the
house, leaving my father in a state of pitiable nervousness. Night after
night I heard him pacing his room, and it was just as he was recovering
his confidence that the blow did at last fall.'

"'And how?' I asked eagerly.

"'In a most extraordinary fashion. A letter arrived for my father
yesterday evening, bearing the Fordingbridge post-mark. My father read
it, clapped both his hands to his head, and began running round the room
in little circles like a man who has been driven out of his senses. When
I at last drew him down on to the sofa, his mouth and eyelids were all
puckered on one side, and I saw that he had a stroke. Dr. Fordham came
over at once. We put him to bed; but the paralysis has spread, he has
shown no sign of returning consciousness, and I think that we shall
hardly find him alive.'

"'You horrify me, Trevor!' I cried. 'What then could have been in this
letter to cause so dreadful a result?'

"'Nothing. There lies the inexplicable part of it. The message was
absurd and trivial. Ah, my God, it is as I feared!'

"As he spoke we came round the curve of the avenue, and saw in the
fading light that every blind in the house had been drawn down. As
we dashed up to the door, my friend's face convulsed with grief, a
gentleman in black emerged from it.

"'When did it happen, doctor?' asked Trevor.

"'Almost immediately after you left.'

"'Did he recover consciousness?'

"'For an instant before the end.'

"'Any message for me.'

"'Only that the papers were in the back drawer of the Japanese cabinet.'

"My friend ascended with the doctor to the chamber of death, while I
remained in the study, turning the whole matter over and over in my
head, and feeling as sombre as ever I had done in my life. What was the
past of this Trevor, pugilist, traveler, and gold-digger, and how had he
placed himself in the power of this acid-faced seaman? Why, too, should
he faint at an allusion to the half-effaced initials upon his arm, and
die of fright when he had a letter from Fordingham? Then I remembered
that Fordingham was in Hampshire, and that this Mr. Beddoes, whom the
seaman had gone to visit and presumably to blackmail, had also been
mentioned as living in Hampshire. The letter, then, might either come
from Hudson, the seaman, saying that he had betrayed the guilty secret
which appeared to exist, or it might come from Beddoes, warning an old
confederate that such a betrayal was imminent. So far it seemed clear
enough. But then how could this letter be trivial and grotesque, as
describe by the son? He must have misread it. If so, it must have been
one of those ingenious secret codes which mean one thing while they seem
to mean another. I must see this letter. If there were a hidden meaning
in it, I was confident that I could pluck it forth. For an hour I sat
pondering over it in the gloom, until at last a weeping maid brought in
a lamp, and close at her heels came my friend Trevor, pale but composed,
with these very papers which lie upon my knee held in his grasp. He sat
down opposite to me, drew the lamp to the edge of the table, and handed
me a short note scribbled, as you see, upon a single sheet of gray
paper. 'The supply of game for London is going steadily up,' it ran.
'Head-keeper Hudson, we believe, has been now told to receive all orders
for fly-paper and for preservation of your hen-pheasant's life.'

"I dare say my face looked as bewildered as yours did just now when
first I read this message. Then I reread it very carefully. It was
evidently as I had thought, and some secret meaning must lie buried
in this strange combination of words. Or could it be that there was
a prearranged significance to such phrases as 'fly-paper' and
'hen-pheasant'? Such a meaning would be arbitrary and could not be
deduced in any way. And yet I was loath to believe that this was the
case, and the presence of the word Hudson seemed to show that the
subject of the message was as I had guessed, and that it was from
Beddoes rather than the sailor. I tried it backwards, but the
combination 'life pheasant's hen' was not encouraging. Then I tried
alternate words, but neither 'the of for' nor 'supply game London'
promised to throw any light upon it.

"And then in an instant the key of the riddle was in my hands, and I saw
that every third word, beginning with the first, would give a message
which might well drive old Trevor to despair.

"It was short and terse, the warning, as I now read it to my companion:

"'The game is up. Hudson has told all. Fly for your life.'

"Victor Trevor sank his face into his shaking hands. 'It must be that,
I suppose,' said he. "This is worse than death, for it means disgrace
as well. But what is the meaning of these "head-keepers" and
"hen-pheasants"?'

"'It means nothing to the message, but it might mean a good deal to us
if we had no other means of discovering the sender. You see that he has
begun by writing "The...game...is," and so on. Afterwards he had, to
fulfill the prearranged cipher, to fill in any two words in each space.
He would naturally use the first words which came to his mind, and
if there were so many which referred to sport among them, you may
be tolerably sure that he is either an ardent shot or interested in
breeding. Do you know anything of this Beddoes?'

"'Why, now that you mention it,' said he, 'I remember that my poor
father used to have an invitation from him to shoot over his preserves
every autumn.'

"'Then it is undoubtedly from him that the note comes,' said I. 'It only
remains for us to find out what this secret was which the sailor Hudson
seems to have held over the heads of these two wealthy and respected
men.'

"'Alas, Holmes, I fear that it is one of sin and shame!' cried my
friend. 'But from you I shall have no secrets. Here is the statement
which was drawn up by my father when he knew that the danger from Hudson
had become imminent. I found it in the Japanese cabinet, as he told the
doctor. Take it and read it to me, for I have neither the strength nor
the courage to do it myself.'

"These are the very papers, Watson, which he handed to me, and I will
read them to you, as I read them in the old study that night to him.
They are endorsed outside, as you see, 'Some particulars of the voyage
of the bark _Gloria Scott_, from her leaving Falmouth on the 8th
October, 1855, to her destruction in N. Lat. 15 degrees 20', W. Long.
25 degrees 14' on Nov. 6th.' It is in the form of a letter, and runs in
this way:

"'My dear, dear son, now that approaching disgrace begins to darken the
closing years of my life, I can write with all truth and honesty that it
is not the terror of the law, it is not the loss of my position in the
county, nor is it my fall in the eyes of all who have known me, which
cuts me to the heart; but it is the thought that you should come to
blush for me--you who love me and who have seldom, I hope, had reason to
do other than respect me. But if the blow falls which is forever hanging
over me, then I should wish you to read this, that you may know straight
from me how far I have been to blame. On the other hand, if all should
go well (which may kind God Almighty grant!), then if by any chance this
paper should be still undestroyed and should fall into your hands, I
conjure you, by all you hold sacred, by the memory of your dear mother,
and by the love which had been between us, to hurl it into the fire and
to never give one thought to it again.

"'If then your eye goes on to read this line, I know that I shall
already have been exposed and dragged from my home, or as is more
likely, for you know that my heart is weak, by lying with my tongue
sealed forever in death. In either case the time for suppression is
past, and every word which I tell you is the naked truth, and this I
swear as I hope for mercy.

"'My name, dear lad, is not Trevor. I was James Armitage in my younger
days, and you can understand now the shock that it was to me a few weeks
ago when your college friend addressed me in words which seemed to imply
that he had surprised my secret. As Armitage it was that I entered a
London banking-house, and as Armitage I was convicted of breaking my
country's laws, and was sentenced to transportation. Do not think very
harshly of me, laddie. It was a debt of honor, so called, which I had
to pay, and I used money which was not my own to do it, in the certainty
that I could replace it before there could be any possibility of its
being missed. But the most dreadful ill-luck pursued me. The money which
I had reckoned upon never came to hand, and a premature examination of
accounts exposed my deficit. The case might have been dealt leniently
with, but the laws were more harshly administered thirty years ago than
now, and on my twenty-third birthday I found myself chained as a felon
with thirty-seven other convicts in 'tween-decks of the bark _Gloria
Scott_, bound for Australia.

"'It was the year '55 when the Crimean war was at its height, and the
old convict ships had been largely used as transports in the Black
Sea. The government was compelled, therefore, to use smaller and less
suitable vessels for sending out their prisoners. The Gloria Scott
had been in the Chinese tea-trade, but she was an old-fashioned,
heavy-bowed, broad-beamed craft, and the new clippers had cut her
out. She was a five-hundred-ton boat; and besides her thirty-eight
jail-birds, she carried twenty-six of a crew, eighteen soldiers, a
captain, three mates, a doctor, a chaplain, and four warders. Nearly a
hundred souls were in her, all told, when we set sail from Falmouth.

"'The partitions between the cells of the convicts, instead of being of
thick oak, as is usual in convict-ships, were quite thin and frail.
The man next to me, upon the aft side, was one whom I had particularly
noticed when we were led down the quay. He was a young man with a
clear, hairless face, a long, thin nose, and rather nut-cracker jaws.
He carried his head very jauntily in the air, had a swaggering style
of walking, and was, above all else, remarkable for his extraordinary
height. I don't think any of our heads would have come up to his
shoulder, and I am sure that he could not have measured less than six
and a half feet. It was strange among so many sad and weary faces to see
one which was full of energy and resolution. The sight of it was to me
like a fire in a snow-storm. I was glad, then, to find that he was my
neighbor, and gladder still when, in the dead of the night, I heard a
whisper close to my ear, and found that he had managed to cut an opening
in the board which separated us.

"'"Hullo, chummy!" said he, "what's your name, and what are you here
for?"

"'I answered him, and asked in turn who I was talking with.

"'"I'm Jack Prendergast," said he, "and by God! You'll learn to bless my
name before you've done with me."

"'I remembered hearing of his case, for it was one which had made an
immense sensation throughout the country some time before my own arrest.
He was a man of good family and of great ability, but of incurably
vicious habits, who had by an ingenious system of fraud obtained huge
sums of money from the leading London merchants.

"'"Ha, ha! You remember my case!" said he proudly.

"'"Very well, indeed."

"'"Then maybe you remember something queer about it?"

"'"What was that, then?"

"'"I'd had nearly a quarter of a million, hadn't I?"

"'"So it was said."

"'"But none was recovered, eh?"

"'"No."

"'"Well, where d'ye suppose the balance is?" he asked.

"'"I have no idea," said I.

"'"Right between my finger and thumb," he cried. "By God! I've got more
pounds to my name than you've hairs on your head. And if you've money,
my son, and know how to handle it and spread it, you can do anything.
Now, you don't think it likely that a man who could do anything is going
to wear his breeches out sitting in the stinking hold of a rat-gutted,
beetle-ridden, mouldy old coffin of a Chin China coaster. No, sir, such
a man will look after himself and will look after his chums. You may lay
to that! You hold on to him, and you may kiss the book that he'll haul
you through."

"'That was his style of talk, and at first I thought it meant nothing;
but after a while, when he had tested me and sworn me in with all
possible solemnity, he let me understand that there really was a plot
to gain command of the vessel. A dozen of the prisoners had hatched it
before they came aboard, Prendergast was the leader, and his money was
the motive power.

"'"I'd a partner," said he, "a rare good man, as true as a stock to a
barrel. He's got the dibbs, he has, and where do you think he is at this
moment? Why, he's the chaplain of this ship--the chaplain, no less! He
came aboard with a black coat, and his papers right, and money enough in
his box to buy the thing right up from keel to main-truck. The crew
are his, body and soul. He could buy 'em at so much a gross with a cash
discount, and he did it before ever they signed on. He's got two of the
warders and Mereer, the second mate, and he'd get the captain himself,
if he thought him worth it."

"'"What are we to do, then?" I asked.

"'"What do you think?" said he. "We'll make the coats of some of these
soldiers redder than ever the tailor did."

"'"But they are armed," said I.

"'"And so shall we be, my boy. There's a brace of pistols for every
mother's son of us, and if we can't carry this ship, with the crew at
our back, it's time we were all sent to a young misses' boarding-school.
You speak to your mate upon the left to-night, and see if he is to be
trusted."

"'I did so, and found my other neighbor to be a young fellow in much
the same position as myself, whose crime had been forgery. His name was
Evans, but he afterwards changed it, like myself, and he is now a rich
and prosperous man in the south of England. He was ready enough to join
the conspiracy, as the only means of saving ourselves, and before we had
crossed the Bay there were only two of the prisoners who were not in the
secret. One of these was of weak mind, and we did not dare to trust him,
and the other was suffering from jaundice, and could not be of any use
to us.

"'From the beginning there was really nothing to prevent us from taking
possession of the ship. The crew were a set of ruffians, specially
picked for the job. The sham chaplain came into our cells to exhort us,
carrying a black bag, supposed to be full of tracts, and so often did
he come that by the third day we had each stowed away at the foot of our
beds a file, a brace of pistols, a pound of powder, and twenty slugs.
Two of the warders were agents of Prendergast, and the second mate was
his right-hand man. The captain, the two mates, two warders Lieutenant
Martin, his eighteen soldiers, and the doctor were all that we had
against us. Yet, safe as it was, we determined to neglect no precaution,
and to make our attack suddenly by night. It came, however, more quickly
than we expected, and in this way.

"'One evening, about the third week after our start, the doctor had come
down to see one of the prisoners who was ill, and putting his hand down
on the bottom of his bunk he felt the outline of the pistols. If he had
been silent he might have blown the whole thing, but he was a nervous
little chap, so he gave a cry of surprise and turned so pale that the
man knew what was up in an instant and seized him. He was gagged before
he could give the alarm, and tied down upon the bed. He had unlocked
the door that led to the deck, and we were through it in a rush. The two
sentries were shot down, and so was a corporal who came running to see
what was the matter. There were two more soldiers at the door of the
state-room, and their muskets seemed not to be loaded, for they never
fired upon us, and they were shot while trying to fix their bayonets.
Then we rushed on into the captain's cabin, but as we pushed open the
door there was an explosion from within, and there he lay with his
brains smeared over the chart of the Atlantic which was pinned upon the
table, while the chaplain stood with a smoking pistol in his hand at
his elbow. The two mates had both been seized by the crew, and the whole
business seemed to be settled.

"'The state-room was next the cabin, and we flocked in there and flopped
down on the settees, all speaking together, for we were just mad with
the feeling that we were free once more. There were lockers all round,
and Wilson, the sham chaplain, knocked one of them in, and pulled out a
dozen of brown sherry. We cracked off the necks of the bottles, poured
the stuff out into tumblers, and were just tossing them off, when in an
instant without warning there came the roar of muskets in our ears, and
the saloon was so full of smoke that we could not see across the table.
When it cleared again the place was a shambles. Wilson and eight others
were wriggling on the top of each other on the floor, and the blood and
the brown sherry on that table turn me sick now when I think of it. We
were so cowed by the sight that I think we should have given the job up
if it had not been for Prendergast. He bellowed like a bull and rushed
for the door with all that were left alive at his heels. Out we ran,
and there on the poop were the lieutenant and ten of his men. The swing
skylights above the saloon table had been a bit open, and they had fired
on us through the slit. We got on them before they could load, and they
stood to it like men; but we had the upper hand of them, and in five
minutes it was all over. My God! Was there ever a slaughter-house
like that ship! Prendergast was like a raging devil, and he picked the
soldiers up as if they had been children and threw them overboard alive
or dead. There was one sergeant that was horribly wounded and yet kept
on swimming for a surprising time, until some one in mercy blew out his
brains. When the fighting was over there was no one left of our enemies
except just the warders the mates, and the doctor.

"'It was over them that the great quarrel arose. There were many of us
who were glad enough to win back our freedom, and yet who had no wish
to have murder on our souls. It was one thing to knock the soldiers over
with their muskets in their hands, and it was another to stand by while
men were being killed in cold blood. Eight of us, five convicts and
three sailors, said that we would not see it done. But there was no
moving Prendergast and those who were with him. Our only chance of
safety lay in making a clean job of it, said he, and he would not leave
a tongue with power to wag in a witness-box. It nearly came to our
sharing the fate of the prisoners, but at last he said that if we wished
we might take a boat and go. We jumped at the offer, for we were already
sick of these bloodthirsty doings, and we saw that there would be worse
before it was done. We were given a suit of sailor togs each, a barrel
of water, two casks, one of junk and one of biscuits, and a compass.
Prendergast threw us over a chart, told us that we were shipwrecked
mariners whose ship had foundered in Lat. 15 degrees and Long 25 degrees
west, and then cut the painter and let us go.

"'And now I come to the most surprising part of my story, my dear son.
The seamen had hauled the fore-yard aback during the rising, but now as
we left them they brought it square again, and as there was a light wind
from the north and east the bark began to draw slowly away from us. Our
boat lay, rising and falling, upon the long, smooth rollers, and Evans
and I, who were the most educated of the party, were sitting in the
sheets working out our position and planning what coast we should make
for. It was a nice question, for the Cape de Verdes were about five
hundred miles to the north of us, and the African coast about seven
hundred to the east. On the whole, as the wind was coming round to the
north, we thought that Sierra Leone might be best, and turned our head
in that direction, the bark being at that time nearly hull down on our
starboard quarter. Suddenly as we looked at her we saw a dense black
cloud of smoke shoot up from her, which hung like a monstrous tree upon
the sky line. A few seconds later a roar like thunder burst upon our
ears, and as the smoke thinned away there was no sign left of the
_Gloria Scott_. In an instant we swept the boat's head round again and
pulled with all our strength for the place where the haze still trailing
over the water marked the scene of this catastrophe.

"'It was a long hour before we reached it, and at first we feared that
we had come too late to save any one. A splintered boat and a number of
crates and fragments of spars rising and falling on the waves showed us
where the vessel had foundered; but there was no sign of life, and we
had turned away in despair when we heard a cry for help, and saw at some
distance a piece of wreckage with a man lying stretched across it. When
we pulled him aboard the boat he proved to be a young seaman of the
name of Hudson, who was so burned and exhausted that he could give us no
account of what had happened until the following morning.

"'It seemed that after we had left, Prendergast and his gang had
proceeded to put to death the five remaining prisoners. The two warders
had been shot and thrown overboard, and so also had the third mate.
Prendergast then descended into the 'tween-decks and with his own hands
cut the throat of the unfortunate surgeon. There only remained the first
mate, who was a bold and active man. When he saw the convict approaching
him with the bloody knife in his hand he kicked off his bonds, which he
had somehow contrived to loosen, and rushing down the deck he plunged
into the after-hold. A dozen convicts, who descended with their pistols
in search of him, found him with a match-box in his hand seated beside
an open powder-barrel, which was one of a hundred carried on board, and
swearing that he would blow all hands up if he were in any way molested.
An instant later the explosion occurred, though Hudson thought it was
caused by the misdirected bullet of one of the convicts rather than the
mate's match. Be the cause what it may, it was the end of the _Gloria
Scott_ and of the rabble who held command of her.

"'Such, in a few words, my dear boy, is the history of this terrible
business in which I was involved. Next day we were picked up by the brig
_Hotspur_, bound for Australia, whose captain found no difficulty in
believing that we were the survivors of a passenger ship which had
foundered. The transport ship Gloria Scott was set down by the Admiralty
as being lost at sea, and no word has ever leaked out as to her true
fate. After an excellent voyage the _Hotspur_ landed us at Sydney, where
Evans and I changed our names and made our way to the diggings,
where, among the crowds who were gathered from all nations, we had no
difficulty in losing our former identities. The rest I need not relate.
We prospered, we traveled, we came back as rich colonials to England,
and we bought country estates. For more than twenty years we have
led peaceful and useful lives, and we hoped that our past was forever
buried. Imagine, then, my feelings when in the seaman who came to us I
recognized instantly the man who had been picked off the wreck. He had
tracked us down somehow, and had set himself to live upon our fears. You
will understand now how it was that I strove to keep the peace with him,
and you will in some measure sympathize with me in the fears which fill
me, now that he has gone from me to his other victim with threats upon
his tongue.'

"Underneath is written in a hand so shaky as to be hardly legible,
'Beddoes writes in cipher to say H. Has told all. Sweet Lord, have mercy
on our souls!'

"That was the narrative which I read that night to young Trevor, and I
think, Watson, that under the circumstances it was a dramatic one.
The good fellow was heart-broken at it, and went out to the Terai tea
planting, where I hear that he is doing well. As to the sailor and
Beddoes, neither of them was ever heard of again after that day on which
the letter of warning was written. They both disappeared utterly and
completely. No complaint had been lodged with the police, so that
Beddoes had mistaken a threat for a deed. Hudson had been seen lurking
about, and it was believed by the police that he had done away with
Beddoes and had fled. For myself I believe that the truth was exactly
the opposite. I think that it is most probable that Beddoes, pushed to
desperation and believing himself to have been already betrayed, had
revenged himself upon Hudson, and had fled from the country with as much
money as he could lay his hands on. Those are the facts of the case,
Doctor, and if they are of any use to your collection, I am sure that
they are very heartily at your service."




Adventure V. The Musgrave Ritual


An anomaly which often struck me in the character of my friend Sherlock
Holmes was that, although in his methods of thought he was the neatest
and most methodical of mankind, and although also he affected a certain
quiet primness of dress, he was none the less in his personal habits one
of the most untidy men that ever drove a fellow-lodger to distraction.
Not that I am in the least conventional in that respect myself. The
rough-and-tumble work in Afghanistan, coming on the top of a natural
Bohemianism of disposition, has made me rather more lax than befits a
medical man. But with me there is a limit, and when I find a man who
keeps his cigars in the coal-scuttle, his tobacco in the toe end of
a Persian slipper, and his unanswered correspondence transfixed by a
jack-knife into the very centre of his wooden mantelpiece, then I begin
to give myself virtuous airs. I have always held, too, that pistol
practice should be distinctly an open-air pastime; and when Holmes, in
one of his queer humors, would sit in an arm-chair with his hair-trigger
and a hundred Boxer cartridges, and proceed to adorn the opposite
wall with a patriotic V. R. done in bullet-pocks, I felt strongly that
neither the atmosphere nor the appearance of our room was improved by
it.

Our chambers were always full of chemicals and of criminal relics which
had a way of wandering into unlikely positions, and of turning up in
the butter-dish or in even less desirable places. But his papers were
my great crux. He had a horror of destroying documents, especially those
which were connected with his past cases, and yet it was only once in
every year or two that he would muster energy to docket and arrange
them; for, as I have mentioned somewhere in these incoherent memoirs,
the outbursts of passionate energy when he performed the remarkable
feats with which his name is associated were followed by reactions of
lethargy during which he would lie about with his violin and his books,
hardly moving save from the sofa to the table. Thus month after month
his papers accumulated, until every corner of the room was stacked with
bundles of manuscript which were on no account to be burned, and which
could not be put away save by their owner. One winter's night, as we
sat together by the fire, I ventured to suggest to him that, as he had
finished pasting extracts into his common-place book, he might employ
the next two hours in making our room a little more habitable. He could
not deny the justice of my request, so with a rather rueful face he went
off to his bedroom, from which he returned presently pulling a large tin
box behind him. This he placed in the middle of the floor and, squatting
down upon a stool in front of it, he threw back the lid. I could see
that it was already a third full of bundles of paper tied up with red
tape into separate packages.

"There are cases enough here, Watson," said he, looking at me with
mischievous eyes. "I think that if you knew all that I had in this box
you would ask me to pull some out instead of putting others in."

"These are the records of your early work, then?" I asked. "I have often
wished that I had notes of those cases."

"Yes, my boy, these were all done prematurely before my biographer
had come to glorify me." He lifted bundle after bundle in a tender,
caressing sort of way. "They are not all successes, Watson," said he.
"But there are some pretty little problems among them. Here's the record
of the Tarleton murders, and the case of Vamberry, the wine merchant,
and the adventure of the old Russian woman, and the singular affair
of the aluminium crutch, as well as a full account of Ricoletti of the
club-foot, and his abominable wife. And here--ah, now, this really is
something a little recherché."

He dived his arm down to the bottom of the chest, and brought up a small
wooden box with a sliding lid, such as children's toys are kept in. From
within he produced a crumpled piece of paper, and old-fashioned brass
key, a peg of wood with a ball of string attached to it, and three rusty
old disks of metal.

"Well, my boy, what do you make of this lot?" he asked, smiling at my
expression.

"It is a curious collection."

"Very curious, and the story that hangs round it will strike you as
being more curious still."

"These relics have a history then?"

"So much so that they are history."

"What do you mean by that?"

Sherlock Holmes picked them up one by one, and laid them along the edge
of the table. Then he reseated himself in his chair and looked them over
with a gleam of satisfaction in his eyes.

"These," said he, "are all that I have left to remind me of the
adventure of the Musgrave Ritual."

I had heard him mention the case more than once, though I had never been
able to gather the details. "I should be so glad," said I, "if you would
give me an account of it."

"And leave the litter as it is?" he cried, mischievously. "Your tidiness
won't bear much strain after all, Watson. But I should be glad that you
should add this case to your annals, for there are points in it which
make it quite unique in the criminal records of this or, I believe,
of any other country. A collection of my trifling achievements would
certainly be incomplete which contained no account of this very singular
business.

"You may remember how the affair of the _Gloria Scott_, and my
conversation with the unhappy man whose fate I told you of, first turned
my attention in the direction of the profession which has become my
life's work. You see me now when my name has become known far and
wide, and when I am generally recognized both by the public and by the
official force as being a final court of appeal in doubtful cases.
Even when you knew me first, at the time of the affair which you have
commemorated in 'A Study in Scarlet,' I had already established a
considerable, though not a very lucrative, connection. You can hardly
realize, then, how difficult I found it at first, and how long I had to
wait before I succeeded in making any headway.

"When I first came up to London I had rooms in Montague Street, just
round the corner from the British Museum, and there I waited, filling in
my too abundant leisure time by studying all those branches of science
which might make me more efficient. Now and again cases came in my way,
principally through the introduction of old fellow-students, for during
my last years at the University there was a good deal of talk there
about myself and my methods. The third of these cases was that of the
Musgrave Ritual, and it is to the interest which was aroused by that
singular chain of events, and the large issues which proved to be at
stake, that I trace my first stride towards the position which I now
hold.

"Reginald Musgrave had been in the same college as myself, and I had
some slight acquaintance with him. He was not generally popular among
the undergraduates, though it always seemed to me that what was set down
as pride was really an attempt to cover extreme natural diffidence.
In appearance he was a man of exceedingly aristocratic type, thin,
high-nosed, and large-eyed, with languid and yet courtly manners. He was
indeed a scion of one of the very oldest families in the kingdom,
though his branch was a cadet one which had separated from the northern
Musgraves some time in the sixteenth century, and had established itself
in western Sussex, where the Manor House of Hurlstone is perhaps the
oldest inhabited building in the county. Something of his birth place
seemed to cling to the man, and I never looked at his pale, keen face
or the poise of his head without associating him with gray archways and
mullioned windows and all the venerable wreckage of a feudal keep. Once
or twice we drifted into talk, and I can remember that more than once he
expressed a keen interest in my methods of observation and inference.

"For four years I had seen nothing of him until one morning he walked
into my room in Montague Street. He had changed little, was dressed like
a young man of fashion--he was always a bit of a dandy--and preserved
the same quiet, suave manner which had formerly distinguished him.

"'How has all gone with you Musgrave?' I asked, after we had cordially
shaken hands.

"'You probably heard of my poor father's death,' said he; 'he was
carried off about two years ago. Since then I have of course had the
Hurlstone estates to manage, and as I am member for my district as well,
my life has been a busy one. But I understand, Holmes, that you are
turning to practical ends those powers with which you used to amaze us?'

"'Yes,' said I, 'I have taken to living by my wits.'

"'I am delighted to hear it, for your advice at present would be
exceedingly valuable to me. We have had some very strange doings at
Hurlstone, and the police have been able to throw no light upon the
matter. It is really the most extraordinary and inexplicable business.'

"You can imagine with what eagerness I listened to him, Watson, for
the very chance for which I had been panting during all those months
of inaction seemed to have come within my reach. In my inmost heart I
believed that I could succeed where others failed, and now I had the
opportunity to test myself.

"'Pray, let me have the details,' I cried.

"Reginald Musgrave sat down opposite to me, and lit the cigarette which
I had pushed towards him.

"'You must know,' said he, 'that though I am a bachelor, I have to keep
up a considerable staff of servants at Hurlstone, for it is a rambling
old place, and takes a good deal of looking after. I preserve, too, and
in the pheasant months I usually have a house-party, so that it would
not do to be short-handed. Altogether there are eight maids, the cook,
the butler, two footmen, and a boy. The garden and the stables of course
have a separate staff.

"'Of these servants the one who had been longest in our service was
Brunton the butler. He was a young school-master out of place when he
was first taken up by my father, but he was a man of great energy and
character, and he soon became quite invaluable in the household. He was
a well-grown, handsome man, with a splendid forehead, and though he has
been with us for twenty years he cannot be more than forty now. With
his personal advantages and his extraordinary gifts--for he can speak
several languages and play nearly every musical instrument--it is
wonderful that he should have been satisfied so long in such a position,
but I suppose that he was comfortable, and lacked energy to make any
change. The butler of Hurlstone is always a thing that is remembered by
all who visit us.

"'But this paragon has one fault. He is a bit of a Don Juan, and you can
imagine that for a man like him it is not a very difficult part to play
in a quiet country district. When he was married it was all right, but
since he has been a widower we have had no end of trouble with him. A
few months ago we were in hopes that he was about to settle down again
for he became engaged to Rachel Howells, our second house-maid; but he
has thrown her over since then and taken up with Janet Tregellis, the
daughter of the head game-keeper. Rachel--who is a very good girl, but
of an excitable Welsh temperament--had a sharp touch of brain-fever,
and goes about the house now--or did until yesterday--like a black-eyed
shadow of her former self. That was our first drama at Hurlstone; but a
second one came to drive it from our minds, and it was prefaced by the
disgrace and dismissal of butler Brunton.

"'This was how it came about. I have said that the man was intelligent,
and this very intelligence has caused his ruin, for it seems to have
led to an insatiable curiosity about things which did not in the least
concern him. I had no idea of the lengths to which this would carry him,
until the merest accident opened my eyes to it.

"'I have said that the house is a rambling one. One day last week--on
Thursday night, to be more exact--I found that I could not sleep,
having foolishly taken a cup of strong café noir after my dinner. After
struggling against it until two in the morning, I felt that it was quite
hopeless, so I rose and lit the candle with the intention of continuing
a novel which I was reading. The book, however, had been left in the
billiard-room, so I pulled on my dressing-gown and started off to get
it.

"'In order to reach the billiard-room I had to descend a flight of
stairs and then to cross the head of a passage which led to the library
and the gun-room. You can imagine my surprise when, as I looked down
this corridor, I saw a glimmer of light coming from the open door of the
library. I had myself extinguished the lamp and closed the door before
coming to bed. Naturally my first thought was of burglars. The corridors
at Hurlstone have their walls largely decorated with trophies of old
weapons. From one of these I picked a battle-axe, and then, leaving my
candle behind me, I crept on tiptoe down the passage and peeped in at
the open door.

"'Brunton, the butler, was in the library. He was sitting, fully
dressed, in an easy-chair, with a slip of paper which looked like a
map upon his knee, and his forehead sunk forward upon his hand in deep
thought. I stood dumb with astonishment, watching him from the darkness.
A small taper on the edge of the table shed a feeble light which
sufficed to show me that he was fully dressed. Suddenly, as I looked,
he rose from his chair, and walking over to a bureau at the side, he
unlocked it and drew out one of the drawers. From this he took a paper,
and returning to his seat he flattened it out beside the taper on the
edge of the table, and began to study it with minute attention. My
indignation at this calm examination of our family documents overcame
me so far that I took a step forward, and Brunton, looking up, saw me
standing in the doorway. He sprang to his feet, his face turned livid
with fear, and he thrust into his breast the chart-like paper which he
had been originally studying.

"'"So!" said I. "This is how you repay the trust which we have reposed
in you. You will leave my service to-morrow."

"'He bowed with the look of a man who is utterly crushed, and slunk past
me without a word. The taper was still on the table, and by its light
I glanced to see what the paper was which Brunton had taken from the
bureau. To my surprise it was nothing of any importance at all,
but simply a copy of the questions and answers in the singular old
observance called the Musgrave Ritual. It is a sort of ceremony peculiar
to our family, which each Musgrave for centuries past has gone through
on his coming of age--a thing of private interest, and perhaps of some
little importance to the archaeologist, like our own blazonings and
charges, but of no practical use whatever.'

"'We had better come back to the paper afterwards,' said I.

"'If you think it really necessary,' he answered, with some hesitation.
'To continue my statement, however: I relocked the bureau, using the key
which Brunton had left, and I had turned to go when I was surprised to
find that the butler had returned, and was standing before me.

"'"Mr. Musgrave, sir," he cried, in a voice which was hoarse with
emotion, "I can't bear disgrace, sir. I've always been proud above my
station in life, and disgrace would kill me. My blood will be on your
head, sir--it will, indeed--if you drive me to despair. If you cannot
keep me after what has passed, then for God's sake let me give you
notice and leave in a month, as if of my own free will. I could stand
that, Mr. Musgrave, but not to be cast out before all the folk that I
know so well."

"'"You don't deserve much consideration, Brunton," I answered. "Your
conduct has been most infamous. However, as you have been a long time in
the family, I have no wish to bring public disgrace upon you. A month,
however is too long. Take yourself away in a week, and give what reason
you like for going."

"'"Only a week, sir?" he cried, in a despairing voice. "A fortnight--say
at least a fortnight!"

"'"A week," I repeated, "and you may consider yourself to have been very
leniently dealt with."

"'He crept away, his face sunk upon his breast, like a broken man, while
I put out the light and returned to my room.


"'"For two days after this Brunton was most assiduous in his attention
to his duties. I made no allusion to what had passed, and waited with
some curiosity to see how he would cover his disgrace. On the third
morning, however he did not appear, as was his custom, after breakfast
to receive my instructions for the day. As I left the dining-room I
happened to meet Rachel Howells, the maid. I have told you that she had
only recently recovered from an illness, and was looking so wretchedly
pale and wan that I remonstrated with her for being at work.

"'"You should be in bed," I said. "Come back to your duties when you are
stronger."

"'She looked at me with so strange an expression that I began to suspect
that her brain was affected.

"'"I am strong enough, Mr. Musgrave," said she.

"'"We will see what the doctor says," I answered. "You must stop work
now, and when you go downstairs just say that I wish to see Brunton."

"'"The butler is gone," said she.

"'"Gone! Gone where?"

"'"He is gone. No one has seen him. He is not in his room. Oh, yes, he
is gone, he is gone!" She fell back against the wall with shriek after
shriek of laughter, while I, horrified at this sudden hysterical attack,
rushed to the bell to summon help. The girl was taken to her room, still
screaming and sobbing, while I made inquiries about Brunton. There was
no doubt about it that he had disappeared. His bed had not been slept
in, he had been seen by no one since he had retired to his room the
night before, and yet it was difficult to see how he could have left
the house, as both windows and doors were found to be fastened in the
morning. His clothes, his watch, and even his money were in his room,
but the black suit which he usually wore was missing. His slippers,
too, were gone, but his boots were left behind. Where then could butler
Brunton have gone in the night, and what could have become of him now?

"'Of course we searched the house from cellar to garret, but there was
no trace of him. It is, as I have said, a labyrinth of an old house,
especially the original wing, which is now practically uninhabited; but
we ransacked every room and cellar without discovering the least sign
of the missing man. It was incredible to me that he could have gone away
leaving all his property behind him, and yet where could he be? I called
in the local police, but without success. Rain had fallen on the night
before and we examined the lawn and the paths all round the house, but
in vain. Matters were in this state, when a new development quite drew
our attention away from the original mystery.

"'For two days Rachel Howells had been so ill, sometimes delirious,
sometimes hysterical, that a nurse had been employed to sit up with her
at night. On the third night after Brunton's disappearance, the nurse,
finding her patient sleeping nicely, had dropped into a nap in the
arm-chair, when she woke in the early morning to find the bed empty, the
window open, and no signs of the invalid. I was instantly aroused, and,
with the two footmen, started off at once in search of the missing girl.
It was not difficult to tell the direction which she had taken, for,
starting from under her window, we could follow her footmarks easily
across the lawn to the edge of the mere, where they vanished close to
the gravel path which leads out of the grounds. The lake there is eight
feet deep, and you can imagine our feelings when we saw that the trail
of the poor demented girl came to an end at the edge of it.

"'Of course, we had the drags at once, and set to work to recover the
remains, but no trace of the body could we find. On the other hand, we
brought to the surface an object of a most unexpected kind. It was a
linen bag which contained within it a mass of old rusted and discolored
metal and several dull-colored pieces of pebble or glass. This strange
find was all that we could get from the mere, and, although we made
every possible search and inquiry yesterday, we know nothing of the fate
either of Rachel Howells or of Richard Brunton. The county police are at
their wits' end, and I have come up to you as a last resource.'

"You can imagine, Watson, with what eagerness I listened to this
extraordinary sequence of events, and endeavored to piece them together,
and to devise some common thread upon which they might all hang. The
butler was gone. The maid was gone. The maid had loved the butler, but
had afterwards had cause to hate him. She was of Welsh blood, fiery
and passionate. She had been terribly excited immediately after his
disappearance. She had flung into the lake a bag containing some
curious contents. These were all factors which had to be taken into
consideration, and yet none of them got quite to the heart of the
matter. What was the starting-point of this chain of events? There lay
the end of this tangled line.

"'I must see that paper, Musgrave,' said I, 'which this butler of your
thought it worth his while to consult, even at the risk of the loss of
his place.'

"'It is rather an absurd business, this ritual of ours,' he answered.
'But it has at least the saving grace of antiquity to excuse it. I have
a copy of the questions and answers here if you care to run your eye
over them.'

"He handed me the very paper which I have here, Watson, and this is the
strange catechism to which each Musgrave had to submit when he came to
man's estate. I will read you the questions and answers as they stand.

"'Whose was it?'

"'His who is gone.'

"'Who shall have it?'

"'He who will come.'

"'Where was the sun?'

"'Over the oak.'

"'Where was the shadow?'

"'Under the elm.'

"How was it stepped?'

"'North by ten and by ten, east by five and by five, south by two and by
two, west by one and by one, and so under.'

"'What shall we give for it?'

"'All that is ours.'

"'Why should we give it?'

"'For the sake of the trust.'

"'The original has no date, but is in the spelling of the middle of the
seventeenth century,' remarked Musgrave. 'I am afraid, however, that it
can be of little help to you in solving this mystery.'

"'At least,' said I, 'it gives us another mystery, and one which is even
more interesting than the first. It may be that the solution of the one
may prove to be the solution of the other. You will excuse me, Musgrave,
if I say that your butler appears to me to have been a very clever man,
and to have had a clearer insight than ten generations of his masters.'

"'I hardly follow you,' said Musgrave. 'The paper seems to me to be of
no practical importance.'

"'But to me it seems immensely practical, and I fancy that Brunton took
the same view. He had probably seen it before that night on which you
caught him.'

"'It is very possible. We took no pains to hide it.'

"'He simply wished, I should imagine, to refresh his memory upon that
last occasion. He had, as I understand, some sort of map or chart which
he was comparing with the manuscript, and which he thrust into his
pocket when you appeared.'

"'That is true. But what could he have to do with this old family custom
of ours, and what does this rigmarole mean?'

"'I don't think that we should have much difficulty in determining
that,' said I; 'with your permission we will take the first train down
to Sussex, and go a little more deeply into the matter upon the spot.'


"The same afternoon saw us both at Hurlstone. Possibly you have seen
pictures and read descriptions of the famous old building, so I will
confine my account of it to saying that it is built in the shape of
an L, the long arm being the more modern portion, and the shorter the
ancient nucleus, from which the other had developed. Over the low,
heavily-lintelled door, in the centre of this old part, is chiseled the
date, 1607, but experts are agreed that the beams and stone-work are
really much older than this. The enormously thick walls and tiny windows
of this part had in the last century driven the family into building the
new wing, and the old one was used now as a store-house and a cellar,
when it was used at all. A splendid park with fine old timber surrounds
the house, and the lake, to which my client had referred, lay close to
the avenue, about two hundred yards from the building.

"I was already firmly convinced, Watson, that there were not three
separate mysteries here, but one only, and that if I could read the
Musgrave Ritual aright I should hold in my hand the clue which would
lead me to the truth concerning both the butler Brunton and the maid
Howells. To that then I turned all my energies. Why should this servant
be so anxious to master this old formula? Evidently because he saw
something in it which had escaped all those generations of country
squires, and from which he expected some personal advantage. What was it
then, and how had it affected his fate?

"It was perfectly obvious to me, on reading the ritual, that the
measurements must refer to some spot to which the rest of the document
alluded, and that if we could find that spot, we should be in a fair way
towards finding what the secret was which the old Musgraves had thought
it necessary to embalm in so curious a fashion. There were two guides
given us to start with, an oak and an elm. As to the oak there could be
no question at all. Right in front of the house, upon the left-hand
side of the drive, there stood a patriarch among oaks, one of the most
magnificent trees that I have ever seen.

"'That was there when your ritual was drawn up,' said I, as we drove
past it.

"'It was there at the Norman Conquest in all probability,' he answered.
'It has a girth of twenty-three feet.'

"'Have you any old elms?' I asked.

"'There used to be a very old one over yonder but it was struck by
lightning ten years ago, and we cut down the stump.'

"'You can see where it used to be?'

"'Oh, yes.'

"'There are no other elms?'

"'No old ones, but plenty of beeches.'

"'I should like to see where it grew.'

"We had driven up in a dog-cart, and my client led me away at once,
without our entering the house, to the scar on the lawn where the
elm had stood. It was nearly midway between the oak and the house. My
investigation seemed to be progressing.

"'I suppose it is impossible to find out how high the elm was?' I asked.

"'I can give you it at once. It was sixty-four feet.'

"'How do you come to know it?' I asked, in surprise.

"'When my old tutor used to give me an exercise in trigonometry, it
always took the shape of measuring heights. When I was a lad I worked
out every tree and building in the estate.'

"This was an unexpected piece of luck. My data were coming more quickly
than I could have reasonably hoped.

"'Tell me,' I asked, 'did your butler ever ask you such a question?'

"Reginald Musgrave looked at me in astonishment. 'Now that you call it
to my mind,' he answered, 'Brunton did ask me about the height of the
tree some months ago, in connection with some little argument with the
groom.'

"This was excellent news, Watson, for it showed me that I was on the
right road. I looked up at the sun. It was low in the heavens, and I
calculated that in less than an hour it would lie just above the topmost
branches of the old oak. One condition mentioned in the Ritual would
then be fulfilled. And the shadow of the elm must mean the farther end
of the shadow, otherwise the trunk would have been chosen as the guide.
I had, then, to find where the far end of the shadow would fall when the
sun was just clear of the oak."

"That must have been difficult, Holmes, when the elm was no longer
there."

"Well, at least I knew that if Brunton could do it, I could also.
Besides, there was no real difficulty. I went with Musgrave to his study
and whittled myself this peg, to which I tied this long string with a
knot at each yard. Then I took two lengths of a fishing-rod, which came
to just six feet, and I went back with my client to where the elm had
been. The sun was just grazing the top of the oak. I fastened the rod
on end, marked out the direction of the shadow, and measured it. It was
nine feet in length.

"Of course the calculation now was a simple one. If a rod of six feet
threw a shadow of nine, a tree of sixty-four feet would throw one of
ninety-six, and the line of the one would of course be the line of the
other. I measured out the distance, which brought me almost to the
wall of the house, and I thrust a peg into the spot. You can imagine
my exultation, Watson, when within two inches of my peg I saw a conical
depression in the ground. I knew that it was the mark made by Brunton in
his measurements, and that I was still upon his trail.

"From this starting-point I proceeded to step, having first taken the
cardinal points by my pocket-compass. Ten steps with each foot took me
along parallel with the wall of the house, and again I marked my spot
with a peg. Then I carefully paced off five to the east and two to the
south. It brought me to the very threshold of the old door. Two steps
to the west meant now that I was to go two paces down the stone-flagged
passage, and this was the place indicated by the Ritual.

"Never have I felt such a cold chill of disappointment, Watson. For a
moment is seemed to me that there must be some radical mistake in my
calculations. The setting sun shone full upon the passage floor, and I
could see that the old, foot-worn gray stones with which it was paved
were firmly cemented together, and had certainly not been moved for many
a long year. Brunton had not been at work here. I tapped upon the floor,
but it sounded the same all over, and there was no sign of any crack
or crevice. But, fortunately, Musgrave, who had begun to appreciate the
meaning of my proceedings, and who was now as excited as myself, took
out his manuscript to check my calculation.

"'And under,' he cried. 'You have omitted the "and under."'

"I had thought that it meant that we were to dig, but now, of course,
I saw at once that I was wrong. 'There is a cellar under this then?' I
cried.

"'Yes, and as old as the house. Down here, through this door.'

"We went down a winding stone stair, and my companion, striking a match,
lit a large lantern which stood on a barrel in the corner. In an instant
it was obvious that we had at last come upon the true place, and that we
had not been the only people to visit the spot recently.

"It had been used for the storage of wood, but the billets, which had
evidently been littered over the floor, were now piled at the sides, so
as to leave a clear space in the middle. In this space lay a large and
heavy flagstone with a rusted iron ring in the centre to which a thick
shepherd's-check muffler was attached.

"'By Jove!' cried my client. 'That's Brunton's muffler. I have seen it
on him, and could swear to it. What has the villain been doing here?'

"At my suggestion a couple of the county police were summoned to be
present, and I then endeavored to raise the stone by pulling on the
cravat. I could only move it slightly, and it was with the aid of one
of the constables that I succeeded at last in carrying it to one side.
A black hole yawned beneath into which we all peered, while Musgrave,
kneeling at the side, pushed down the lantern.

"A small chamber about seven feet deep and four feet square lay open to
us. At one side of this was a squat, brass-bound wooden box, the lid of
which was hinged upwards, with this curious old-fashioned key projecting
from the lock. It was furred outside by a thick layer of dust, and damp
and worms had eaten through the wood, so that a crop of livid fungi
was growing on the inside of it. Several discs of metal, old coins
apparently, such as I hold here, were scattered over the bottom of the
box, but it contained nothing else.

"At the moment, however, we had no thought for the old chest, for our
eyes were riveted upon that which crouched beside it. It was the figure
of a man, clad in a suit of black, who squatted down upon his hams with
his forehead sunk upon the edge of the box and his two arms thrown out
on each side of it. The attitude had drawn all the stagnant blood to
the face, and no man could have recognized that distorted liver-colored
countenance; but his height, his dress, and his hair were all sufficient
to show my client, when we had drawn the body up, that it was indeed his
missing butler. He had been dead some days, but there was no wound or
bruise upon his person to show how he had met his dreadful end. When
his body had been carried from the cellar we found ourselves still
confronted with a problem which was almost as formidable as that with
which we had started.

"I confess that so far, Watson, I had been disappointed in my
investigation. I had reckoned upon solving the matter when once I had
found the place referred to in the Ritual; but now I was there, and was
apparently as far as ever from knowing what it was which the family had
concealed with such elaborate precautions. It is true that I had thrown
a light upon the fate of Brunton, but now I had to ascertain how that
fate had come upon him, and what part had been played in the matter by
the woman who had disappeared. I sat down upon a keg in the corner and
thought the whole matter carefully over.

"You know my methods in such cases, Watson. I put myself in the man's
place and, having first gauged his intelligence, I try to imagine how I
should myself have proceeded under the same circumstances. In this
case the matter was simplified by Brunton's intelligence being quite
first-rate, so that it was unnecessary to make any allowance for the
personal equation, as the astronomers have dubbed it. He knew that
something valuable was concealed. He had spotted the place. He found
that the stone which covered it was just too heavy for a man to move
unaided. What would he do next? He could not get help from outside, even
if he had some one whom he could trust, without the unbarring of doors
and considerable risk of detection. It was better, if he could, to have
his helpmate inside the house. But whom could he ask? This girl had been
devoted to him. A man always finds it hard to realize that he may have
finally lost a woman's love, however badly he may have treated her. He
would try by a few attentions to make his peace with the girl Howells,
and then would engage her as his accomplice. Together they would come at
night to the cellar, and their united force would suffice to raise the
stone. So far I could follow their actions as if I had actually seen
them.

"But for two of them, and one a woman, it must have been heavy work the
raising of that stone. A burly Sussex policeman and I had found it no
light job. What would they do to assist them? Probably what I should
have done myself. I rose and examined carefully the different billets
of wood which were scattered round the floor. Almost at once I came
upon what I expected. One piece, about three feet in length, had a very
marked indentation at one end, while several were flattened at the sides
as if they had been compressed by some considerable weight. Evidently,
as they had dragged the stone up they had thrust the chunks of wood into
the chink, until at last, when the opening was large enough to crawl
through, they would hold it open by a billet placed lengthwise, which
might very well become indented at the lower end, since the whole weight
of the stone would press it down on to the edge of this other slab. So
far I was still on safe ground.

"And now how was I to proceed to reconstruct this midnight drama?
Clearly, only one could fit into the hole, and that one was Brunton. The
girl must have waited above. Brunton then unlocked the box, handed up
the contents presumably--since they were not to be found--and then--and
then what happened?

"What smouldering fire of vengeance had suddenly sprung into flame in
this passionate Celtic woman's soul when she saw the man who had wronged
her--wronged her, perhaps, far more than we suspected--in her power?
Was it a chance that the wood had slipped, and that the stone had shut
Brunton into what had become his sepulchre? Had she only been guilty of
silence as to his fate? Or had some sudden blow from her hand dashed the
support away and sent the slab crashing down into its place? Be that
as it might, I seemed to see that woman's figure still clutching at her
treasure trove and flying wildly up the winding stair, with her ears
ringing perhaps with the muffled screams from behind her and with the
drumming of frenzied hands against the slab of stone which was choking
her faithless lover's life out.

"Here was the secret of her blanched face, her shaken nerves, her peals
of hysterical laughter on the next morning. But what had been in the
box? What had she done with that? Of course, it must have been the old
metal and pebbles which my client had dragged from the mere. She had
thrown them in there at the first opportunity to remove the last trace
of her crime.

"For twenty minutes I had sat motionless, thinking the matter out.
Musgrave still stood with a very pale face, swinging his lantern and
peering down into the hole.

"'These are coins of Charles the First,' said he, holding out the few
which had been in the box; 'you see we were right in fixing our date for
the Ritual.'

"'We may find something else of Charles the First,' I cried, as the
probable meaning of the first two questions of the Ritual broke suddenly
upon me. 'Let me see the contents of the bag which you fished from the
mere.'


"We ascended to his study, and he laid the debris before me. I could
understand his regarding it as of small importance when I looked at it,
for the metal was almost black and the stones lustreless and dull. I
rubbed one of them on my sleeve, however, and it glowed afterwards like
a spark in the dark hollow of my hand. The metal work was in the form
of a double ring, but it had been bent and twisted out of its original
shape.

"'You must bear in mind,' said I, 'that the royal party made head in
England even after the death of the king, and that when they at last
fled they probably left many of their most precious possessions buried
behind them, with the intention of returning for them in more peaceful
times.'

"'My ancestor, Sir Ralph Musgrave, was a prominent Cavalier and the
right-hand man of Charles the Second in his wanderings,' said my friend.

"'Ah, indeed!' I answered. 'Well now, I think that really should give us
the last link that we wanted. I must congratulate you on coming into
the possession, though in rather a tragic manner of a relic which is of
great intrinsic value, but of even greater importance as an historical
curiosity.'

"'What is it, then?' he gasped in astonishment.

"'It is nothing less than the ancient crown of the kings of England.'

"'The crown!'

"'Precisely. Consider what the Ritual says: How does it run? "Whose was
it?" "His who is gone." That was after the execution of Charles. Then,
"Who shall have it?" "He who will come." That was Charles the Second,
whose advent was already foreseen. There can, I think, be no doubt that
this battered and shapeless diadem once encircled the brows of the royal
Stuarts.'

"'And how came it in the pond?'

"'Ah, that is a question that will take some time to answer.' And with
that I sketched out to him the whole long chain of surmise and of proof
which I had constructed. The twilight had closed in and the moon was
shining brightly in the sky before my narrative was finished.

"'And how was it then that Charles did not get his crown when he
returned?' asked Musgrave, pushing back the relic into its linen bag.

"'Ah, there you lay your finger upon the one point which we shall
probably never be able to clear up. It is likely that the Musgrave who
held the secret died in the interval, and by some oversight left this
guide to his descendant without explaining the meaning of it. From that
day to this it has been handed down from father to son, until at last
it came within reach of a man who tore its secret out of it and lost his
life in the venture.'


"And that's the story of the Musgrave Ritual, Watson. They have the
crown down at Hurlstone--though they had some legal bother and a
considerable sum to pay before they were allowed to retain it. I am sure
that if you mentioned my name they would be happy to show it to you. Of
the woman nothing was ever heard, and the probability is that she got
away out of England and carried herself and the memory of her crime to
some land beyond the seas."




Adventure VI. The Reigate Puzzle


It was some time before the health of my friend Mr. Sherlock Holmes
recovered from the strain caused by his immense exertions in the spring
of '87. The whole question of the Netherland-Sumatra Company and of the
colossal schemes of Baron Maupertuis are too recent in the minds of the
public, and are too intimately concerned with politics and finance to be
fitting subjects for this series of sketches. They led, however, in an
indirect fashion to a singular and complex problem which gave my friend
an opportunity of demonstrating the value of a fresh weapon among the
many with which he waged his life-long battle against crime.

On referring to my notes I see that it was upon the 14th of April that
I received a telegram from Lyons which informed me that Holmes was
lying ill in the Hotel Dulong. Within twenty-four hours I was in his
sick-room, and was relieved to find that there was nothing formidable in
his symptoms. Even his iron constitution, however, had broken down
under the strain of an investigation which had extended over two months,
during which period he had never worked less than fifteen hours a day,
and had more than once, as he assured me, kept to his task for five days
at a stretch. Even the triumphant issue of his labors could not save him
from reaction after so terrible an exertion, and at a time when Europe
was ringing with his name and when his room was literally ankle-deep
with congratulatory telegrams I found him a prey to the blackest
depression. Even the knowledge that he had succeeded where the police of
three countries had failed, and that he had outmanoeuvred at every point
the most accomplished swindler in Europe, was insufficient to rouse him
from his nervous prostration.

Three days later we were back in Baker Street together; but it was
evident that my friend would be much the better for a change, and the
thought of a week of spring time in the country was full of attractions
to me also. My old friend, Colonel Hayter, who had come under my
professional care in Afghanistan, had now taken a house near Reigate in
Surrey, and had frequently asked me to come down to him upon a visit. On
the last occasion he had remarked that if my friend would only come
with me he would be glad to extend his hospitality to him also. A little
diplomacy was needed, but when Holmes understood that the establishment
was a bachelor one, and that he would be allowed the fullest freedom,
he fell in with my plans and a week after our return from Lyons we were
under the Colonel's roof. Hayter was a fine old soldier who had seen
much of the world, and he soon found, as I had expected, that Holmes and
he had much in common.

On the evening of our arrival we were sitting in the Colonel's gun-room
after dinner, Holmes stretched upon the sofa, while Hayter and I looked
over his little armory of Eastern weapons.

"By the way," said he suddenly, "I think I'll take one of these pistols
upstairs with me in case we have an alarm."

"An alarm!" said I.

"Yes, we've had a scare in this part lately. Old Acton, who is one of
our county magnates, had his house broken into last Monday. No great
damage done, but the fellows are still at large."

"No clue?" asked Holmes, cocking his eye at the Colonel.

"None as yet. But the affair is a petty one, one of our little country
crimes, which must seem too small for your attention, Mr. Holmes, after
this great international affair."

Holmes waved away the compliment, though his smile showed that it had
pleased him.

"Was there any feature of interest?"

"I fancy not. The thieves ransacked the library and got very little for
their pains. The whole place was turned upside down, drawers burst open,
and presses ransacked, with the result that an odd volume of Pope's
'Homer,' two plated candlesticks, an ivory letter-weight, a small oak
barometer, and a ball of twine are all that have vanished."

"What an extraordinary assortment!" I exclaimed.

"Oh, the fellows evidently grabbed hold of everything they could get."

Holmes grunted from the sofa.

"The county police ought to make something of that," said he; "why, it
is surely obvious that--"

But I held up a warning finger.

"You are here for a rest, my dear fellow. For Heaven's sake don't get
started on a new problem when your nerves are all in shreds."

Holmes shrugged his shoulders with a glance of comic resignation towards
the Colonel, and the talk drifted away into less dangerous channels.

It was destined, however, that all my professional caution should be
wasted, for next morning the problem obtruded itself upon us in such a
way that it was impossible to ignore it, and our country visit took a
turn which neither of us could have anticipated. We were at breakfast
when the Colonel's butler rushed in with all his propriety shaken out of
him.

"Have you heard the news, sir?" he gasped. "At the Cunningham's sir!"

"Burglary!" cried the Colonel, with his coffee-cup in mid-air.

"Murder!"

The Colonel whistled. "By Jove!" said he. "Who's killed, then? The J.P.
or his son?"

"Neither, sir. It was William the coachman. Shot through the heart, sir,
and never spoke again."

"Who shot him, then?"

"The burglar, sir. He was off like a shot and got clean away. He'd just
broke in at the pantry window when William came on him and met his end
in saving his master's property."

"What time?"

"It was last night, sir, somewhere about twelve."

"Ah, then, we'll step over afterwards," said the Colonel, coolly
settling down to his breakfast again. "It's a baddish business," he
added when the butler had gone; "he's our leading man about here, is old
Cunningham, and a very decent fellow too. He'll be cut up over this, for
the man has been in his service for years and was a good servant. It's
evidently the same villains who broke into Acton's."

"And stole that very singular collection," said Holmes, thoughtfully.

"Precisely."

"Hum! It may prove the simplest matter in the world, but all the same
at first glance this is just a little curious, is it not? A gang of
burglars acting in the country might be expected to vary the scene of
their operations, and not to crack two cribs in the same district within
a few days. When you spoke last night of taking precautions I remember
that it passed through my mind that this was probably the last parish
in England to which the thief or thieves would be likely to turn their
attention--which shows that I have still much to learn."

"I fancy it's some local practitioner," said the Colonel. "In that case,
of course, Acton's and Cunningham's are just the places he would go for,
since they are far the largest about here."

"And richest?"

"Well, they ought to be, but they've had a lawsuit for some years which
has sucked the blood out of both of them, I fancy. Old Acton has some
claim on half Cunningham's estate, and the lawyers have been at it with
both hands."

"If it's a local villain there should not be much difficulty in running
him down," said Holmes with a yawn. "All right, Watson, I don't intend
to meddle."

"Inspector Forrester, sir," said the butler, throwing open the door.

The official, a smart, keen-faced young fellow, stepped into the room.
"Good-morning, Colonel," said he; "I hope I don't intrude, but we hear
that Mr. Holmes of Baker Street is here."

The Colonel waved his hand towards my friend, and the Inspector bowed.

"We thought that perhaps you would care to step across, Mr. Holmes."

"The fates are against you, Watson," said he, laughing. "We were
chatting about the matter when you came in, Inspector. Perhaps you
can let us have a few details." As he leaned back in his chair in the
familiar attitude I knew that the case was hopeless.

"We had no clue in the Acton affair. But here we have plenty to go on,
and there's no doubt it is the same party in each case. The man was
seen."

"Ah!"

"Yes, sir. But he was off like a deer after the shot that killed poor
William Kirwan was fired. Mr. Cunningham saw him from the bedroom
window, and Mr. Alec Cunningham saw him from the back passage. It was
quarter to twelve when the alarm broke out. Mr. Cunningham had just got
into bed, and Mr. Alec was smoking a pipe in his dressing-gown. They
both heard William the coachman calling for help, and Mr. Alec ran down
to see what was the matter. The back door was open, and as he came to
the foot of the stairs he saw two men wrestling together outside. One of
them fired a shot, the other dropped, and the murderer rushed across the
garden and over the hedge. Mr. Cunningham, looking out of his bedroom,
saw the fellow as he gained the road, but lost sight of him at once. Mr.
Alec stopped to see if he could help the dying man, and so the villain
got clean away. Beyond the fact that he was a middle-sized man and
dressed in some dark stuff, we have no personal clue; but we are making
energetic inquiries, and if he is a stranger we shall soon find him
out."

"What was this William doing there? Did he say anything before he died?"

"Not a word. He lives at the lodge with his mother, and as he was a
very faithful fellow we imagine that he walked up to the house with
the intention of seeing that all was right there. Of course this Acton
business has put every one on their guard. The robber must have just
burst open the door--the lock has been forced--when William came upon
him."

"Did William say anything to his mother before going out?"

"She is very old and deaf, and we can get no information from her. The
shock has made her half-witted, but I understand that she was never
very bright. There is one very important circumstance, however. Look at
this!"

He took a small piece of torn paper from a note-book and spread it out
upon his knee.

"This was found between the finger and thumb of the dead man. It appears
to be a fragment torn from a larger sheet. You will observe that the
hour mentioned upon it is the very time at which the poor fellow met his
fate. You see that his murderer might have torn the rest of the sheet
from him or he might have taken this fragment from the murderer. It
reads almost as though it were an appointment."

Holmes took up the scrap of paper, a fac-simile of which is here
reproduced.

     d at quarter to twelve learn what maybe

"Presuming that it is an appointment," continued the Inspector, "it is
of course a conceivable theory that this William Kirwan--though he had
the reputation of being an honest man, may have been in league with the
thief. He may have met him there, may even have helped him to break in
the door, and then they may have fallen out between themselves."

"This writing is of extraordinary interest," said Holmes, who had been
examining it with intense concentration. "These are much deeper waters
than I had thought." He sank his head upon his hands, while the Inspector
smiled at the effect which his case had had upon the famous London
specialist.

"Your last remark," said Holmes, presently, "as to the possibility of
there being an understanding between the burglar and the servant, and
this being a note of appointment from one to the other, is an ingenious
and not entirely impossible supposition. But this writing opens up--" He
sank his head into his hands again and remained for some minutes in the
deepest thought. When he raised his face again, I was surprised to see
that his cheek was tinged with color, and his eyes as bright as before
his illness. He sprang to his feet with all his old energy.

"I'll tell you what," said he, "I should like to have a quiet little
glance into the details of this case. There is something in it which
fascinates me extremely. If you will permit me, Colonel, I will leave my
friend Watson and you, and I will step round with the Inspector to test
the truth of one or two little fancies of mine. I will be with you again
in half an hour."

An hour and half had elapsed before the Inspector returned alone.

"Mr. Holmes is walking up and down in the field outside," said he. "He
wants us all four to go up to the house together."

"To Mr. Cunningham's?"

"Yes, sir."

"What for?"

The Inspector shrugged his shoulders. "I don't quite know, sir. Between
ourselves, I think Mr. Holmes had not quite got over his illness yet.
He's been behaving very queerly, and he is very much excited."

"I don't think you need alarm yourself," said I. "I have usually found
that there was method in his madness."

"Some folks might say there was madness in his method," muttered the
Inspector. "But he's all on fire to start, Colonel, so we had best go
out if you are ready."

We found Holmes pacing up and down in the field, his chin sunk upon his
breast, and his hands thrust into his trousers pockets.

"The matter grows in interest," said he. "Watson, your country-trip has
been a distinct success. I have had a charming morning."

"You have been up to the scene of the crime, I understand," said the
Colonel.

"Yes; the Inspector and I have made quite a little reconnaissance
together."

"Any success?"

"Well, we have seen some very interesting things. I'll tell you what we
did as we walk. First of all, we saw the body of this unfortunate man.
He certainly died from a revolver wound as reported."

"Had you doubted it, then?"

"Oh, it is as well to test everything. Our inspection was not wasted. We
then had an interview with Mr. Cunningham and his son, who were able
to point out the exact spot where the murderer had broken through the
garden-hedge in his flight. That was of great interest."

"Naturally."

"Then we had a look at this poor fellow's mother. We could get no
information from her, however, as she is very old and feeble."

"And what is the result of your investigations?"

"The conviction that the crime is a very peculiar one. Perhaps our visit
now may do something to make it less obscure. I think that we are both
agreed, Inspector that the fragment of paper in the dead man's hand,
bearing, as it does, the very hour of his death written upon it, is of
extreme importance."

"It should give a clue, Mr. Holmes."

"It does give a clue. Whoever wrote that note was the man who brought
William Kirwan out of his bed at that hour. But where is the rest of
that sheet of paper?"

"I examined the ground carefully in the hope of finding it," said the
Inspector.

"It was torn out of the dead man's hand. Why was some one so anxious to
get possession of it? Because it incriminated him. And what would he do
with it? Thrust it into his pocket, most likely, never noticing that a
corner of it had been left in the grip of the corpse. If we could get
the rest of that sheet it is obvious that we should have gone a long way
towards solving the mystery."

"Yes, but how can we get at the criminal's pocket before we catch the
criminal?"

"Well, well, it was worth thinking over. Then there is another obvious
point. The note was sent to William. The man who wrote it could not have
taken it; otherwise, of course, he might have delivered his own message
by word of mouth. Who brought the note, then? Or did it come through the
post?"

"I have made inquiries," said the Inspector. "William received a letter
by the afternoon post yesterday. The envelope was destroyed by him."

"Excellent!" cried Holmes, clapping the Inspector on the back. "You've
seen the postman. It is a pleasure to work with you. Well, here is the
lodge, and if you will come up, Colonel, I will show you the scene of
the crime."

We passed the pretty cottage where the murdered man had lived, and
walked up an oak-lined avenue to the fine old Queen Anne house, which
bears the date of Malplaquet upon the lintel of the door. Holmes and
the Inspector led us round it until we came to the side gate, which is
separated by a stretch of garden from the hedge which lines the road. A
constable was standing at the kitchen door.

"Throw the door open, officer," said Holmes. "Now, it was on those
stairs that young Mr. Cunningham stood and saw the two men struggling
just where we are. Old Mr. Cunningham was at that window--the second on
the left--and he saw the fellow get away just to the left of that bush.
Then Mr. Alec ran out and knelt beside the wounded man. The ground is
very hard, you see, and there are no marks to guide us." As he spoke two
men came down the garden path, from round the angle of the house. The
one was an elderly man, with a strong, deep-lined, heavy-eyed face; the
other a dashing young fellow, whose bright, smiling expression and showy
dress were in strange contract with the business which had brought us
there.

"Still at it, then?" said he to Holmes. "I thought you Londoners were
never at fault. You don't seem to be so very quick, after all."

"Ah, you must give us a little time," said Holmes good-humoredly.

"You'll want it," said young Alec Cunningham. "Why, I don't see that we
have any clue at all."

"There's only one," answered the Inspector. "We thought that if we could
only find--Good heavens, Mr. Holmes! What is the matter?"

My poor friend's face had suddenly assumed the most dreadful expression.
His eyes rolled upwards, his features writhed in agony, and with a
suppressed groan he dropped on his face upon the ground. Horrified
at the suddenness and severity of the attack, we carried him into the
kitchen, where he lay back in a large chair, and breathed heavily for
some minutes. Finally, with a shamefaced apology for his weakness, he
rose once more.

"Watson would tell you that I have only just recovered from a severe
illness," he explained. "I am liable to these sudden nervous attacks."

"Shall I send you home in my trap?" asked old Cunningham.

"Well, since I am here, there is one point on which I should like to
feel sure. We can very easily verify it."

"What was it?"

"Well, it seems to me that it is just possible that the arrival of
this poor fellow William was not before, but after, the entrance of
the burglary into the house. You appear to take it for granted that,
although the door was forced, the robber never got in."

"I fancy that is quite obvious," said Mr. Cunningham, gravely. "Why, my
son Alec had not yet gone to bed, and he would certainly have heard any
one moving about."

"Where was he sitting?"

"I was smoking in my dressing-room."

"Which window is that?"

"The last on the left next my father's."

"Both of your lamps were lit, of course?"

"Undoubtedly."

"There are some very singular points here," said Holmes, smiling. "Is
it not extraordinary that a burglary--and a burglar who had had some
previous experience--should deliberately break into a house at a time
when he could see from the lights that two of the family were still
afoot?"

"He must have been a cool hand."

"Well, of course, if the case were not an odd one we should not have
been driven to ask you for an explanation," said young Mr. Alec. "But as
to your ideas that the man had robbed the house before William tackled
him, I think it a most absurd notion. Wouldn't we have found the place
disarranged, and missed the things which he had taken?"

"It depends on what the things were," said Holmes. "You must remember
that we are dealing with a burglar who is a very peculiar fellow, and
who appears to work on lines of his own. Look, for example, at the
queer lot of things which he took from Acton's--what was it?--a ball of
string, a letter-weight, and I don't know what other odds and ends."

"Well, we are quite in your hands, Mr. Holmes," said old Cunningham.
"Anything which you or the Inspector may suggest will most certainly be
done."

"In the first place," said Holmes, "I should like you to offer a
reward--coming from yourself, for the officials may take a little time
before they would agree upon the sum, and these things cannot be done
too promptly. I have jotted down the form here, if you would not mind
signing it. Fifty pounds was quite enough, I thought."

"I would willingly give five hundred," said the J.P., taking the slip
of paper and the pencil which Holmes handed to him. "This is not quite
correct, however," he added, glancing over the document.

"I wrote it rather hurriedly."

"You see you begin, 'Whereas, at about a quarter to one on Tuesday
morning an attempt was made,' and so on. It was at a quarter to twelve,
as a matter of fact."

I was pained at the mistake, for I knew how keenly Holmes would feel any
slip of the kind. It was his specialty to be accurate as to fact, but
his recent illness had shaken him, and this one little incident was
enough to show me that he was still far from being himself. He was
obviously embarrassed for an instant, while the Inspector raised his
eyebrows, and Alec Cunningham burst into a laugh. The old gentleman
corrected the mistake, however, and handed the paper back to Holmes.

"Get it printed as soon as possible," he said; "I think your idea is an
excellent one."

Holmes put the slip of paper carefully away into his pocket-book.

"And now," said he, "it really would be a good thing that we should all
go over the house together and make certain that this rather erratic
burglar did not, after all, carry anything away with him."

Before entering, Holmes made an examination of the door which had been
forced. It was evident that a chisel or strong knife had been thrust
in, and the lock forced back with it. We could see the marks in the wood
where it had been pushed in.

"You don't use bars, then?" he asked.

"We have never found it necessary."

"You don't keep a dog?"

"Yes, but he is chained on the other side of the house."

"When do the servants go to bed?"

"About ten."

"I understand that William was usually in bed also at that hour."

"Yes."

"It is singular that on this particular night he should have been up.
Now, I should be very glad if you would have the kindness to show us
over the house, Mr. Cunningham."

A stone-flagged passage, with the kitchens branching away from it, led
by a wooden staircase directly to the first floor of the house. It came
out upon the landing opposite to a second more ornamental stair which
came up from the front hall. Out of this landing opened the drawing-room
and several bedrooms, including those of Mr. Cunningham and his son.
Holmes walked slowly, taking keen note of the architecture of the house.
I could tell from his expression that he was on a hot scent, and yet
I could not in the least imagine in what direction his inferences were
leading him.

"My good sir," said Mr. Cunningham with some impatience, "this is surely
very unnecessary. That is my room at the end of the stairs, and my
son's is the one beyond it. I leave it to your judgment whether it was
possible for the thief to have come up here without disturbing us."

"You must try round and get on a fresh scent, I fancy," said the son
with a rather malicious smile.

"Still, I must ask you to humor me a little further. I should like, for
example, to see how far the windows of the bedrooms command the front.
This, I understand is your son's room"--he pushed open the door--"and
that, I presume, is the dressing-room in which he sat smoking when the
alarm was given. Where does the window of that look out to?" He stepped
across the bedroom, pushed open the door, and glanced round the other
chamber.

"I hope that you are satisfied now?" said Mr. Cunningham, tartly.

"Thank you, I think I have seen all that I wished."

"Then if it is really necessary we can go into my room."

"If it is not too much trouble."

The J. P. shrugged his shoulders, and led the way into his own chamber,
which was a plainly furnished and commonplace room. As we moved across
it in the direction of the window, Holmes fell back until he and I were
the last of the group. Near the foot of the bed stood a dish of oranges
and a carafe of water. As we passed it Holmes, to my unutterable
astonishment, leaned over in front of me and deliberately knocked the
whole thing over. The glass smashed into a thousand pieces and the fruit
rolled about into every corner of the room.

"You've done it now, Watson," said he, coolly. "A pretty mess you've
made of the carpet."

I stooped in some confusion and began to pick up the fruit,
understanding for some reason my companion desired me to take the blame
upon myself. The others did the same, and set the table on its legs
again.

"Hullo!" cried the Inspector, "where's he got to?"

Holmes had disappeared.

"Wait here an instant," said young Alec Cunningham. "The fellow is off
his head, in my opinion. Come with me, father, and see where he has got
to!"

They rushed out of the room, leaving the Inspector, the Colonel, and me
staring at each other.

"'Pon my word, I am inclined to agree with Master Alec," said the
official. "It may be the effect of this illness, but it seems to me
that--"

His words were cut short by a sudden scream of "Help! Help! Murder!"
With a thrill I recognized the voice of that of my friend. I rushed
madly from the room on to the landing. The cries, which had sunk down
into a hoarse, inarticulate shouting, came from the room which we had
first visited. I dashed in, and on into the dressing-room beyond. The
two Cunninghams were bending over the prostrate figure of Sherlock
Holmes, the younger clutching his throat with both hands, while the
elder seemed to be twisting one of his wrists. In an instant the three
of us had torn them away from him, and Holmes staggered to his feet,
very pale and evidently greatly exhausted.

"Arrest these men, Inspector," he gasped.

"On what charge?"

"That of murdering their coachman, William Kirwan."

The Inspector stared about him in bewilderment. "Oh, come now, Mr.
Holmes," said he at last, "I'm sure you don't really mean to--"

"Tut, man, look at their faces!" cried Holmes, curtly.

Never certainly have I seen a plainer confession of guilt upon human
countenances. The older man seemed numbed and dazed with a heavy, sullen
expression upon his strongly-marked face. The son, on the other hand,
had dropped all that jaunty, dashing style which had characterized him,
and the ferocity of a dangerous wild beast gleamed in his dark eyes
and distorted his handsome features. The Inspector said nothing, but,
stepping to the door, he blew his whistle. Two of his constables came at
the call.

"I have no alternative, Mr. Cunningham," said he. "I trust that this may
all prove to be an absurd mistake, but you can see that--Ah, would you?
Drop it!" He struck out with his hand, and a revolver which the younger
man was in the act of cocking clattered down upon the floor.

"Keep that," said Holmes, quietly putting his foot upon it; "you will
find it useful at the trial. But this is what we really wanted." He held
up a little crumpled piece of paper.

"The remainder of the sheet!" cried the Inspector.

"Precisely."

"And where was it?"

"Where I was sure it must be. I'll make the whole matter clear to you
presently. I think, Colonel, that you and Watson might return now, and
I will be with you again in an hour at the furthest. The Inspector and I
must have a word with the prisoners, but you will certainly see me back
at luncheon time."


Sherlock Holmes was as good as his word, for about one o'clock he
rejoined us in the Colonel's smoking-room. He was accompanied by a
little elderly gentleman, who was introduced to me as the Mr. Acton
whose house had been the scene of the original burglary.

"I wished Mr. Acton to be present while I demonstrated this small matter
to you," said Holmes, "for it is natural that he should take a keen
interest in the details. I am afraid, my dear Colonel, that you must
regret the hour that you took in such a stormy petrel as I am."

"On the contrary," answered the Colonel, warmly, "I consider it the
greatest privilege to have been permitted to study your methods of
working. I confess that they quite surpass my expectations, and that I
am utterly unable to account for your result. I have not yet seen the
vestige of a clue."

"I am afraid that my explanation may disillusion you but it has always
been my habit to hide none of my methods, either from my friend Watson
or from any one who might take an intelligent interest in them. But,
first, as I am rather shaken by the knocking about which I had in
the dressing-room, I think that I shall help myself to a dash of your
brandy, Colonel. My strength had been rather tried of late."

"I trust that you had no more of those nervous attacks."

Sherlock Holmes laughed heartily. "We will come to that in its turn,"
said he. "I will lay an account of the case before you in its due order,
showing you the various points which guided me in my decision. Pray
interrupt me if there is any inference which is not perfectly clear to
you.

"It is of the highest importance in the art of detection to be able
to recognize, out of a number of facts, which are incidental and which
vital. Otherwise your energy and attention must be dissipated instead of
being concentrated. Now, in this case there was not the slightest doubt
in my mind from the first that the key of the whole matter must be
looked for in the scrap of paper in the dead man's hand.

"Before going into this, I would draw your attention to the fact that,
if Alec Cunningham's narrative was correct, and if the assailant, after
shooting William Kirwan, had instantly fled, then it obviously could not
be he who tore the paper from the dead man's hand. But if it was not he,
it must have been Alec Cunningham himself, for by the time that the old
man had descended several servants were upon the scene. The point is a
simple one, but the Inspector had overlooked it because he had started
with the supposition that these county magnates had had nothing to do
with the matter. Now, I make a point of never having any prejudices,
and of following docilely wherever fact may lead me, and so, in the
very first stage of the investigation, I found myself looking a little
askance at the part which had been played by Mr. Alec Cunningham.

"And now I made a very careful examination of the corner of paper which
the Inspector had submitted to us. It was at once clear to me that it
formed part of a very remarkable document. Here it is. Do you not now
observe something very suggestive about it?"

"It has a very irregular look," said the Colonel.

"My dear sir," cried Holmes, "there cannot be the least doubt in the
world that it has been written by two persons doing alternate words.
When I draw your attention to the strong t's of 'at' and 'to', and ask
you to compare them with the weak ones of 'quarter' and 'twelve,' you
will instantly recognize the fact. A very brief analysis of these
four words would enable you to say with the utmost confidence that the
'learn' and the 'maybe' are written in the stronger hand, and the 'what'
in the weaker."

"By Jove, it's as clear as day!" cried the Colonel. "Why on earth should
two men write a letter in such a fashion?"

"Obviously the business was a bad one, and one of the men who distrusted
the other was determined that, whatever was done, each should have an
equal hand in it. Now, of the two men, it is clear that the one who
wrote the 'at' and 'to' was the ringleader."

"How do you get at that?"

"We might deduce it from the mere character of the one hand as compared
with the other. But we have more assured reasons than that for supposing
it. If you examine this scrap with attention you will come to the
conclusion that the man with the stronger hand wrote all his words
first, leaving blanks for the other to fill up. These blanks were not
always sufficient, and you can see that the second man had a squeeze
to fit his 'quarter' in between the 'at' and the 'to,' showing that the
latter were already written. The man who wrote all his words first is
undoubtedly the man who planned the affair."

"Excellent!" cried Mr. Acton.

"But very superficial," said Holmes. "We come now, however, to a point
which is of importance. You may not be aware that the deduction of a
man's age from his writing is one which has brought to considerable
accuracy by experts. In normal cases one can place a man in his true
decade with tolerable confidence. I say normal cases, because ill-health
and physical weakness reproduce the signs of old age, even when the
invalid is a youth. In this case, looking at the bold, strong hand of
the one, and the rather broken-backed appearance of the other, which
still retains its legibility although the t's have begun to lose their
crossing, we can say that the one was a young man and the other was
advanced in years without being positively decrepit."

"Excellent!" cried Mr. Acton again.

"There is a further point, however, which is subtler and of greater
interest. There is something in common between these hands. They belong
to men who are blood-relatives. It may be most obvious to you in the
Greek e's, but to me there are many small points which indicate the same
thing. I have no doubt at all that a family mannerism can be traced in
these two specimens of writing. I am only, of course, giving you
the leading results now of my examination of the paper. There were
twenty-three other deductions which would be of more interest to experts
than to you. They all tend to deepen the impression upon my mind that
the Cunninghams, father and son, had written this letter.

"Having got so far, my next step was, of course, to examine into the
details of the crime, and to see how far they would help us. I went up
to the house with the Inspector, and saw all that was to be seen. The
wound upon the dead man was, as I was able to determine with absolute
confidence, fired from a revolver at the distance of something over
four yards. There was no powder-blackening on the clothes. Evidently,
therefore, Alec Cunningham had lied when he said that the two men were
struggling when the shot was fired. Again, both father and son agreed
as to the place where the man escaped into the road. At that point,
however, as it happens, there is a broadish ditch, moist at the bottom.
As there were no indications of bootmarks about this ditch, I was
absolutely sure not only that the Cunninghams had again lied, but that
there had never been any unknown man upon the scene at all.

"And now I have to consider the motive of this singular crime. To get
at this, I endeavored first of all to solve the reason of the original
burglary at Mr. Acton's. I understood, from something which the Colonel
told us, that a lawsuit had been going on between you, Mr. Acton, and
the Cunninghams. Of course, it instantly occurred to me that they had
broken into your library with the intention of getting at some document
which might be of importance in the case."

"Precisely so," said Mr. Acton. "There can be no possible doubt as to
their intentions. I have the clearest claim upon half of their present
estate, and if they could have found a single paper--which, fortunately,
was in the strong-box of my solicitors--they would undoubtedly have
crippled our case."

"There you are," said Holmes, smiling. "It was a dangerous, reckless
attempt, in which I seem to trace the influence of young Alec. Having
found nothing they tried to divert suspicion by making it appear to be
an ordinary burglary, to which end they carried off whatever they could
lay their hands upon. That is all clear enough, but there was much that
was still obscure. What I wanted above all was to get the missing part
of that note. I was certain that Alec had torn it out of the dead man's
hand, and almost certain that he must have thrust it into the pocket of
his dressing-gown. Where else could he have put it? The only question
was whether it was still there. It was worth an effort to find out, and
for that object we all went up to the house.

"The Cunninghams joined us, as you doubtless remember, outside the
kitchen door. It was, of course, of the very first importance that they
should not be reminded of the existence of this paper, otherwise they
would naturally destroy it without delay. The Inspector was about to
tell them the importance which we attached to it when, by the luckiest
chance in the world, I tumbled down in a sort of fit and so changed the
conversation.

"Good heavens!" cried the Colonel, laughing, "do you mean to say all our
sympathy was wasted and your fit an imposture?"

"Speaking professionally, it was admirably done," cried I, looking in
amazement at this man who was forever confounding me with some new phase
of his astuteness.

"It is an art which is often useful," said he. "When I recovered I
managed, by a device which had perhaps some little merit of ingenuity,
to get old Cunningham to write the word 'twelve,' so that I might
compare it with the 'twelve' upon the paper."

"Oh, what an ass I have been!" I exclaimed.

"I could see that you were commiserating me over my weakness," said
Holmes, laughing. "I was sorry to cause you the sympathetic pain which
I know that you felt. We then went upstairs together, and having entered
the room and seen the dressing-gown hanging up behind the door, I
contrived, by upsetting a table, to engage their attention for the
moment, and slipped back to examine the pockets. I had hardly got the
paper, however--which was, as I had expected, in one of them--when the
two Cunninghams were on me, and would, I verily believe, have murdered
me then and there but for your prompt and friendly aid. As it is, I feel
that young man's grip on my throat now, and the father has twisted my
wrist round in the effort to get the paper out of my hand. They saw that
I must know all about it, you see, and the sudden change from absolute
security to complete despair made them perfectly desperate.

"I had a little talk with old Cunningham afterwards as to the motive of
the crime. He was tractable enough, though his son was a perfect demon,
ready to blow out his own or anybody else's brains if he could have got
to his revolver. When Cunningham saw that the case against him was so
strong he lost all heart and made a clean breast of everything. It seems
that William had secretly followed his two masters on the night when
they made their raid upon Mr. Acton's, and having thus got them into
his power, proceeded, under threats of exposure, to levy blackmail upon
them. Mr. Alec, however, was a dangerous man to play games of that
sort with. It was a stroke of positive genius on his part to see in the
burglary scare which was convulsing the country side an opportunity of
plausibly getting rid of the man whom he feared. William was decoyed up
and shot, and had they only got the whole of the note and paid a little
more attention to detail in the accessories, it is very possible that
suspicion might never have been aroused."

"And the note?" I asked.

Sherlock Holmes placed the subjoined paper before us.

     If you will only come around to the east gate you it will
     very much surprise you and be of the greatest service to you
     and also to Annie Morrison. But say nothing to anyone upon
     the matter.

"It is very much the sort of thing that I expected," said he. "Of
course, we do not yet know what the relations may have been between Alec
Cunningham, William Kirwan, and Annie Morrison. The results shows that
the trap was skillfully baited. I am sure that you cannot fail to be
delighted with the traces of heredity shown in the p's and in the tails
of the g's. The absence of the i-dots in the old man's writing is also
most characteristic. Watson, I think our quiet rest in the country has
been a distinct success, and I shall certainly return much invigorated
to Baker Street to-morrow."




Adventure VII. The Crooked Man


One summer night, a few months after my marriage, I was seated by my own
hearth smoking a last pipe and nodding over a novel, for my day's work
had been an exhausting one. My wife had already gone upstairs, and the
sound of the locking of the hall door some time before told me that the
servants had also retired. I had risen from my seat and was knocking out
the ashes of my pipe when I suddenly heard the clang of the bell.

I looked at the clock. It was a quarter to twelve. This could not be
a visitor at so late an hour. A patient, evidently, and possibly an
all-night sitting. With a wry face I went out into the hall and opened
the door. To my astonishment it was Sherlock Holmes who stood upon my
step.

"Ah, Watson," said he, "I hoped that I might not be too late to catch
you."

"My dear fellow, pray come in."

"You look surprised, and no wonder! Relieved, too, I fancy! Hum! You
still smoke the Arcadia mixture of your bachelor days then! There's no
mistaking that fluffy ash upon your coat. It's easy to tell that you
have been accustomed to wear a uniform, Watson. You'll never pass as
a pure-bred civilian as long as you keep that habit of carrying your
handkerchief in your sleeve. Could you put me up to-night?"

"With pleasure."

"You told me that you had bachelor quarters for one, and I see that you
have no gentleman visitor at present. Your hat-stand proclaims as much."

"I shall be delighted if you will stay."

"Thank you. I'll fill the vacant peg then. Sorry to see that you've had
the British workman in the house. He's a token of evil. Not the drains,
I hope?"

"No, the gas."

"Ah! He has left two nail-marks from his boot upon your linoleum
just where the light strikes it. No, thank you, I had some supper at
Waterloo, but I'll smoke a pipe with you with pleasure."

I handed him my pouch, and he seated himself opposite to me and smoked
for some time in silence. I was well aware that nothing but business
of importance would have brought him to me at such an hour, so I waited
patiently until he should come round to it.

"I see that you are professionally rather busy just now," said he,
glancing very keenly across at me.

"Yes, I've had a busy day," I answered. "It may seem very foolish in
your eyes," I added, "but really I don't know how you deduced it."

Holmes chuckled to himself.

"I have the advantage of knowing your habits, my dear Watson," said he.
"When your round is a short one you walk, and when it is a long one you
use a hansom. As I perceive that your boots, although used, are by
no means dirty, I cannot doubt that you are at present busy enough to
justify the hansom."

"Excellent!" I cried.

"Elementary," said he. "It is one of those instances where the reasoner
can produce an effect which seems remarkable to his neighbor, because
the latter has missed the one little point which is the basis of the
deduction. The same may be said, my dear fellow, for the effect of
some of these little sketches of yours, which is entirely meretricious,
depending as it does upon your retaining in your own hands some factors
in the problem which are never imparted to the reader. Now, at present
I am in the position of these same readers, for I hold in this hand
several threads of one of the strangest cases which ever perplexed a
man's brain, and yet I lack the one or two which are needful to complete
my theory. But I'll have them, Watson, I'll have them!" His eyes kindled
and a slight flush sprang into his thin cheeks. For an instant only.
When I glanced again his face had resumed that red-Indian composure
which had made so many regard him as a machine rather than a man.

"The problem presents features of interest," said he. "I may even say
exceptional features of interest. I have already looked into the matter,
and have come, as I think, within sight of my solution. If you could
accompany me in that last step you might be of considerable service to
me."

"I should be delighted."

"Could you go as far as Aldershot to-morrow?"

"I have no doubt Jackson would take my practice."

"Very good. I want to start by the 11.10 from Waterloo."

"That would give me time."

"Then, if you are not too sleepy, I will give you a sketch of what has
happened, and of what remains to be done."

"I was sleepy before you came. I am quite wakeful now."

"I will compress the story as far as may be done without omitting
anything vital to the case. It is conceivable that you may even have
read some account of the matter. It is the supposed murder of Colonel
Barclay, of the Royal Munsters, at Aldershot, which I am investigating."

"I have heard nothing of it."

"It has not excited much attention yet, except locally. The facts are
only two days old. Briefly they are these:

"The Royal Munsters is, as you know, one of the most famous Irish
regiments in the British army. It did wonders both in the Crimea and the
Mutiny, and has since that time distinguished itself upon every possible
occasion. It was commanded up to Monday night by James Barclay,
a gallant veteran, who started as a full private, was raised to
commissioned rank for his bravery at the time of the Mutiny, and so
lived to command the regiment in which he had once carried a musket.

"Colonel Barclay had married at the time when he was a sergeant, and
his wife, whose maiden name was Miss Nancy Devoy, was the daughter of a
former color-sergeant in the same corps. There was, therefore, as can
be imagined, some little social friction when the young couple (for
they were still young) found themselves in their new surroundings. They
appear, however, to have quickly adapted themselves, and Mrs. Barclay
has always, I understand, been as popular with the ladies of the
regiment as her husband was with his brother officers. I may add that
she was a woman of great beauty, and that even now, when she has been
married for upwards of thirty years, she is still of a striking and
queenly appearance.

"Colonel Barclay's family life appears to have been a uniformly happy
one. Major Murphy, to whom I owe most of my facts, assures me that he
has never heard of any misunderstanding between the pair. On the whole,
he thinks that Barclay's devotion to his wife was greater than his
wife's to Barclay. He was acutely uneasy if he were absent from her for
a day. She, on the other hand, though devoted and faithful, was less
obtrusively affectionate. But they were regarded in the regiment as
the very model of a middle-aged couple. There was absolutely nothing in
their mutual relations to prepare people for the tragedy which was to
follow.

"Colonel Barclay himself seems to have had some singular traits in his
character. He was a dashing, jovial old soldier in his usual mood,
but there were occasions on which he seemed to show himself capable
of considerable violence and vindictiveness. This side of his nature,
however, appears never to have been turned towards his wife. Another
fact, which had struck Major Murphy and three out of five of the other
officers with whom I conversed, was the singular sort of depression
which came upon him at times. As the major expressed it, the smile had
often been struck from his mouth, as if by some invisible hand, when he
has been joining the gayeties and chaff of the mess-table. For days on
end, when the mood was on him, he has been sunk in the deepest gloom.
This and a certain tinge of superstition were the only unusual traits
in his character which his brother officers had observed. The latter
peculiarity took the form of a dislike to being left alone, especially
after dark. This puerile feature in a nature which was conspicuously
manly had often given rise to comment and conjecture.

"The first battalion of the Royal Munsters (which is the old 117th) has
been stationed at Aldershot for some years. The married officers live
out of barracks, and the Colonel has during all this time occupied a
villa called Lachine, about half a mile from the north camp. The house
stands in its own grounds, but the west side of it is not more than
thirty yards from the high-road. A coachman and two maids form the
staff of servants. These with their master and mistress were the sole
occupants of Lachine, for the Barclays had no children, nor was it usual
for them to have resident visitors.

"Now for the events at Lachine between nine and ten on the evening of
last Monday."

"Mrs. Barclay was, it appears, a member of the Roman Catholic Church,
and had interested herself very much in the establishment of the Guild
of St. George, which was formed in connection with the Watt Street
Chapel for the purpose of supplying the poor with cast-off clothing.
A meeting of the Guild had been held that evening at eight, and Mrs.
Barclay had hurried over her dinner in order to be present at it. When
leaving the house she was heard by the coachman to make some commonplace
remark to her husband, and to assure him that she would be back before
very long. She then called for Miss Morrison, a young lady who lives
in the next villa, and the two went off together to their meeting. It
lasted forty minutes, and at a quarter-past nine Mrs. Barclay returned
home, having left Miss Morrison at her door as she passed.

"There is a room which is used as a morning-room at Lachine. This faces
the road and opens by a large glass folding-door on to the lawn. The
lawn is thirty yards across, and is only divided from the highway by
a low wall with an iron rail above it. It was into this room that Mrs.
Barclay went upon her return. The blinds were not down, for the room was
seldom used in the evening, but Mrs. Barclay herself lit the lamp and
then rang the bell, asking Jane Stewart, the house-maid, to bring her
a cup of tea, which was quite contrary to her usual habits. The Colonel
had been sitting in the dining-room, but hearing that his wife had
returned he joined her in the morning-room. The coachman saw him cross
the hall and enter it. He was never seen again alive.

"The tea which had been ordered was brought up at the end of ten
minutes; but the maid, as she approached the door, was surprised to
hear the voices of her master and mistress in furious altercation. She
knocked without receiving any answer, and even turned the handle, but
only to find that the door was locked upon the inside. Naturally enough
she ran down to tell the cook, and the two women with the coachman came
up into the hall and listened to the dispute which was still raging.
They all agreed that only two voices were to be heard, those of Barclay
and of his wife. Barclay's remarks were subdued and abrupt, so that none
of them were audible to the listeners. The lady's, on the other hand,
were most bitter, and when she raised her voice could be plainly heard.
'You coward!' she repeated over and over again. 'What can be done now?
What can be done now? Give me back my life. I will never so much as
breathe the same air with you again! You coward! You coward!' Those were
scraps of her conversation, ending in a sudden dreadful cry in the man's
voice, with a crash, and a piercing scream from the woman. Convinced
that some tragedy had occurred, the coachman rushed to the door and
strove to force it, while scream after scream issued from within. He was
unable, however, to make his way in, and the maids were too distracted
with fear to be of any assistance to him. A sudden thought struck him,
however, and he ran through the hall door and round to the lawn upon
which the long French windows open. One side of the window was open,
which I understand was quite usual in the summer-time, and he passed
without difficulty into the room. His mistress had ceased to scream and
was stretched insensible upon a couch, while with his feet tilted over
the side of an arm-chair, and his head upon the ground near the corner
of the fender, was lying the unfortunate soldier stone dead in a pool of
his own blood.

"Naturally, the coachman's first thought, on finding that he could do
nothing for his master, was to open the door. But here an unexpected and
singular difficulty presented itself. The key was not in the inner side
of the door, nor could he find it anywhere in the room. He went out
again, therefore, through the window, and having obtained the help of
a policeman and of a medical man, he returned. The lady, against whom
naturally the strongest suspicion rested, was removed to her room, still
in a state of insensibility. The Colonel's body was then placed upon the
sofa, and a careful examination made of the scene of the tragedy.

"The injury from which the unfortunate veteran was suffering was found
to be a jagged cut some two inches long at the back part of his head,
which had evidently been caused by a violent blow from a blunt weapon.
Nor was it difficult to guess what that weapon may have been. Upon the
floor, close to the body, was lying a singular club of hard carved wood
with a bone handle. The Colonel possessed a varied collection of weapons
brought from the different countries in which he had fought, and it
is conjectured by the police that his club was among his trophies. The
servants deny having seen it before, but among the numerous curiosities
in the house it is possible that it may have been overlooked. Nothing
else of importance was discovered in the room by the police, save the
inexplicable fact that neither upon Mrs. Barclay's person nor upon that
of the victim nor in any part of the room was the missing key to
be found. The door had eventually to be opened by a locksmith from
Aldershot.

"That was the state of things, Watson, when upon the Tuesday morning I,
at the request of Major Murphy, went down to Aldershot to supplement
the efforts of the police. I think that you will acknowledge that the
problem was already one of interest, but my observations soon made me
realize that it was in truth much more extraordinary than would at first
sight appear.

"Before examining the room I cross-questioned the servants, but only
succeeded in eliciting the facts which I have already stated. One other
detail of interest was remembered by Jane Stewart, the housemaid. You
will remember that on hearing the sound of the quarrel she descended and
returned with the other servants. On that first occasion, when she was
alone, she says that the voices of her master and mistress were sunk
so low that she could hear hardly anything, and judged by their tones
rather than their words that they had fallen out. On my pressing her,
however, she remembered that she heard the word David uttered twice by
the lady. The point is of the utmost importance as guiding us towards
the reason of the sudden quarrel. The Colonel's name, you remember, was
James.

"There was one thing in the case which had made the deepest impression
both upon the servants and the police. This was the contortion of the
Colonel's face. It had set, according to their account, into the most
dreadful expression of fear and horror which a human countenance is
capable of assuming. More than one person fainted at the mere sight
of him, so terrible was the effect. It was quite certain that he had
foreseen his fate, and that it had caused him the utmost horror. This,
of course, fitted in well enough with the police theory, if the Colonel
could have seen his wife making a murderous attack upon him. Nor was
the fact of the wound being on the back of his head a fatal objection to
this, as he might have turned to avoid the blow. No information could
be got from the lady herself, who was temporarily insane from an acute
attack of brain-fever.

"From the police I learned that Miss Morrison, who you remember went out
that evening with Mrs. Barclay, denied having any knowledge of what it
was which had caused the ill-humor in which her companion had returned.

"Having gathered these facts, Watson, I smoked several pipes over them,
trying to separate those which were crucial from others which were
merely incidental. There could be no question that the most distinctive
and suggestive point in the case was the singular disappearance of the
door-key. A most careful search had failed to discover it in the room.
Therefore it must have been taken from it. But neither the Colonel
nor the Colonel's wife could have taken it. That was perfectly clear.
Therefore a third person must have entered the room. And that third
person could only have come in through the window. It seemed to me that
a careful examination of the room and the lawn might possibly reveal
some traces of this mysterious individual. You know my methods, Watson.
There was not one of them which I did not apply to the inquiry. And it
ended by my discovering traces, but very different ones from those which
I had expected. There had been a man in the room, and he had crossed
the lawn coming from the road. I was able to obtain five very clear
impressions of his foot-marks: one in the roadway itself, at the point
where he had climbed the low wall, two on the lawn, and two very faint
ones upon the stained boards near the window where he had entered.
He had apparently rushed across the lawn, for his toe-marks were much
deeper than his heels. But it was not the man who surprised me. It was
his companion."

"His companion!"

Holmes pulled a large sheet of tissue-paper out of his pocket and
carefully unfolded it upon his knee.

"What do you make of that?" he asked.

The paper was covered with he tracings of the foot-marks of some small
animal. It had five well-marked foot-pads, an indication of long nails,
and the whole print might be nearly as large as a dessert-spoon.

"It's a dog," said I.

"Did you ever hear of a dog running up a curtain? I found distinct
traces that this creature had done so."

"A monkey, then?"

"But it is not the print of a monkey."

"What can it be, then?"

"Neither dog nor cat nor monkey nor any creature that we are familiar
with. I have tried to reconstruct it from the measurements. Here are
four prints where the beast has been standing motionless. You see that
it is no less than fifteen inches from fore-foot to hind. Add to that
the length of neck and head, and you get a creature not much less than
two feet long--probably more if there is any tail. But now observe this
other measurement. The animal has been moving, and we have the length
of its stride. In each case it is only about three inches. You have an
indication, you see, of a long body with very short legs attached to it.
It has not been considerate enough to leave any of its hair behind it.
But its general shape must be what I have indicated, and it can run up a
curtain, and it is carnivorous."

"How do you deduce that?"

"Because it ran up the curtain. A canary's cage was hanging in the
window, and its aim seems to have been to get at the bird."

"Then what was the beast?"

"Ah, if I could give it a name it might go a long way towards solving
the case. On the whole, it was probably some creature of the weasel and
stoat tribe--and yet it is larger than any of these that I have seen."

"But what had it to do with the crime?"

"That, also, is still obscure. But we have learned a good deal, you
perceive. We know that a man stood in the road looking at the quarrel
between the Barclays--the blinds were up and the room lighted. We know,
also, that he ran across the lawn, entered the room, accompanied by a
strange animal, and that he either struck the Colonel or, as is equally
possible, that the Colonel fell down from sheer fright at the sight of
him, and cut his head on the corner of the fender. Finally, we have the
curious fact that the intruder carried away the key with him when he
left."

"Your discoveries seem to have left the business more obscure that it
was before," said I.

"Quite so. They undoubtedly showed that the affair was much deeper than
was at first conjectured. I thought the matter over, and I came to
the conclusion that I must approach the case from another aspect. But
really, Watson, I am keeping you up, and I might just as well tell you
all this on our way to Aldershot to-morrow."

"Thank you, you have gone rather too far to stop."

"It is quite certain that when Mrs. Barclay left the house at half-past
seven she was on good terms with her husband. She was never, as I think
I have said, ostentatiously affectionate, but she was heard by the
coachman chatting with the Colonel in a friendly fashion. Now, it was
equally certain that, immediately on her return, she had gone to the
room in which she was least likely to see her husband, had flown to tea
as an agitated woman will, and finally, on his coming in to her, had
broken into violent recriminations. Therefore something had occurred
between seven-thirty and nine o'clock which had completely altered her
feelings towards him. But Miss Morrison had been with her during the
whole of that hour and a half. It was absolutely certain, therefore, in
spite of her denial, that she must know something of the matter.

"My first conjecture was, that possibly there had been some passages
between this young lady and the old soldier, which the former had now
confessed to the wife. That would account for the angry return, and
also for the girl's denial that anything had occurred. Nor would it be
entirely incompatible with most of the words overhead. But there was the
reference to David, and there was the known affection of the Colonel for
his wife, to weigh against it, to say nothing of the tragic intrusion
of this other man, which might, of course, be entirely disconnected with
what had gone before. It was not easy to pick one's steps, but, on the
whole, I was inclined to dismiss the idea that there had been anything
between the Colonel and Miss Morrison, but more than ever convinced that
the young lady held the clue as to what it was which had turned Mrs.
Barclay to hatred of her husband. I took the obvious course, therefore,
of calling upon Miss M., of explaining to her that I was perfectly
certain that she held the facts in her possession, and of assuring her
that her friend, Mrs. Barclay, might find herself in the dock upon a
capital charge unless the matter were cleared up.

"Miss Morrison is a little ethereal slip of a girl, with timid eyes
and blond hair, but I found her by no means wanting in shrewdness and
common-sense. She sat thinking for some time after I had spoken, and
then, turning to me with a brisk air of resolution, she broke into a
remarkable statement which I will condense for your benefit.

"'I promised my friend that I would say nothing of the matter, and a
promise is a promise,' said she; 'but if I can really help her when
so serious a charge is laid against her, and when her own mouth, poor
darling, is closed by illness, then I think I am absolved from my
promise. I will tell you exactly what happened upon Monday evening.

"'We were returning from the Watt Street Mission about a quarter to nine
o'clock. On our way we had to pass through Hudson Street, which is
a very quiet thoroughfare. There is only one lamp in it, upon the
left-hand side, and as we approached this lamp I saw a man coming
towards us with his back very bent, and something like a box slung over
one of his shoulders. He appeared to be deformed, for he carried his
head low and walked with his knees bent. We were passing him when he
raised his face to look at us in the circle of light thrown by the lamp,
and as he did so he stopped and screamed out in a dreadful voice, "My
God, it's Nancy!" Mrs. Barclay turned as white as death, and would have
fallen down had the dreadful-looking creature not caught hold of her. I
was going to call for the police, but she, to my surprise, spoke quite
civilly to the fellow.

"'"I thought you had been dead this thirty years, Henry," said she, in a
shaking voice.

"'"So I have," said he, and it was awful to hear the tones that he said
it in. He had a very dark, fearsome face, and a gleam in his eyes that
comes back to me in my dreams. His hair and whiskers were shot with
gray, and his face was all crinkled and puckered like a withered apple.

"'"Just walk on a little way, dear," said Mrs. Barclay; "I want to have
a word with this man. There is nothing to be afraid of." She tried to
speak boldly, but she was still deadly pale and could hardly get her
words out for the trembling of her lips.

"'I did as she asked me, and they talked together for a few minutes.
Then she came down the street with her eyes blazing, and I saw the
crippled wretch standing by the lamp-post and shaking his clenched fists
in the air as if he were mad with rage. She never said a word until we
were at the door here, when she took me by the hand and begged me to
tell no one what had happened.

"'"It's an old acquaintance of mine who has come down in the world,"
said she. When I promised her I would say nothing she kissed me, and I
have never seen her since. I have told you now the whole truth, and if
I withheld it from the police it is because I did not realize then the
danger in which my dear friend stood. I know that it can only be to her
advantage that everything should be known.'

"There was her statement, Watson, and to me, as you can imagine, it was
like a light on a dark night. Everything which had been disconnected
before began at once to assume its true place, and I had a shadowy
presentiment of the whole sequence of events. My next step obviously was
to find the man who had produced such a remarkable impression upon Mrs.
Barclay. If he were still in Aldershot it should not be a very difficult
matter. There are not such a very great number of civilians, and a
deformed man was sure to have attracted attention. I spent a day in the
search, and by evening--this very evening, Watson--I had run him down.
The man's name is Henry Wood, and he lives in lodgings in this same
street in which the ladies met him. He has only been five days in the
place. In the character of a registration-agent I had a most interesting
gossip with his landlady. The man is by trade a conjurer and performer,
going round the canteens after nightfall, and giving a little
entertainment at each. He carries some creature about with him in that
box; about which the landlady seemed to be in considerable trepidation,
for she had never seen an animal like it. He uses it in some of his
tricks according to her account. So much the woman was able to tell me,
and also that it was a wonder the man lived, seeing how twisted he was,
and that he spoke in a strange tongue sometimes, and that for the last
two nights she had heard him groaning and weeping in his bedroom. He
was all right, as far as money went, but in his deposit he had given her
what looked like a bad florin. She showed it to me, Watson, and it was
an Indian rupee.

"So now, my dear fellow, you see exactly how we stand and why it is I
want you. It is perfectly plain that after the ladies parted from this
man he followed them at a distance, that he saw the quarrel between
husband and wife through the window, that he rushed in, and that
the creature which he carried in his box got loose. That is all very
certain. But he is the only person in this world who can tell us exactly
what happened in that room."

"And you intend to ask him?"

"Most certainly--but in the presence of a witness."

"And I am the witness?"

"If you will be so good. If he can clear the matter up, well and good.
If he refuses, we have no alternative but to apply for a warrant."

"But how do you know he'll be there when we return?"

"You may be sure that I took some precautions. I have one of my Baker
Street boys mounting guard over him who would stick to him like a burr,
go where he might. We shall find him in Hudson Street to-morrow, Watson,
and meanwhile I should be the criminal myself if I kept you out of bed
any longer."

It was midday when we found ourselves at the scene of the tragedy, and,
under my companion's guidance, we made our way at once to Hudson Street.
In spite of his capacity for concealing his emotions, I could easily see
that Holmes was in a state of suppressed excitement, while I was myself
tingling with that half-sporting, half-intellectual pleasure which
I invariably experienced when I associated myself with him in his
investigations.

"This is the street," said he, as we turned into a short thoroughfare
lined with plain two-storied brick houses. "Ah, here is Simpson to
report."

"He's in all right, Mr. Holmes," cried a small street Arab, running up
to us.

"Good, Simpson!" said Holmes, patting him on the head. "Come along,
Watson. This is the house." He sent in his card with a message that he
had come on important business, and a moment later we were face to face
with the man whom we had come to see. In spite of the warm weather he
was crouching over a fire, and the little room was like an oven. The
man sat all twisted and huddled in his chair in a way which gave an
indescribably impression of deformity; but the face which he turned
towards us, though worn and swarthy, must at some time have been
remarkable for its beauty. He looked suspiciously at us now out of
yellow-shot, bilious eyes, and, without speaking or rising, he waved
towards two chairs.

"Mr. Henry Wood, late of India, I believe," said Holmes, affably. "I've
come over this little matter of Colonel Barclay's death."

"What should I know about that?"

"That's what I want to ascertain. You know, I suppose, that unless the
matter is cleared up, Mrs. Barclay, who is an old friend of yours, will
in all probability be tried for murder."

The man gave a violent start.

"I don't know who you are," he cried, "nor how you come to know what you
do know, but will you swear that this is true that you tell me?"

"Why, they are only waiting for her to come to her senses to arrest
her."

"My God! Are you in the police yourself?"

"No."

"What business is it of yours, then?"

"It's every man's business to see justice done."

"You can take my word that she is innocent."

"Then you are guilty."

"No, I am not."

"Who killed Colonel James Barclay, then?"

"It was a just providence that killed him. But, mind you this, that if
I had knocked his brains out, as it was in my heart to do, he would have
had no more than his due from my hands. If his own guilty conscience had
not struck him down it is likely enough that I might have had his blood
upon my soul. You want me to tell the story. Well, I don't know why I
shouldn't, for there's no cause for me to be ashamed of it.

"It was in this way, sir. You see me now with my back like a camel and
my ribs all awry, but there was a time when Corporal Henry Wood was the
smartest man in the 117th foot. We were in India then, in cantonments,
at a place we'll call Bhurtee. Barclay, who died the other day, was
sergeant in the same company as myself, and the belle of the regiment,
ay, and the finest girl that ever had the breath of life between her
lips, was Nancy Devoy, the daughter of the color-sergeant. There were
two men that loved her, and one that she loved, and you'll smile when
you look at this poor thing huddled before the fire, and hear me say
that it was for my good looks that she loved me.

"Well, though I had her heart, her father was set upon her marrying
Barclay. I was a harum-scarum, reckless lad, and he had had an
education, and was already marked for the sword-belt. But the girl held
true to me, and it seemed that I would have had her when the Mutiny
broke out, and all hell was loose in the country.

"We were shut up in Bhurtee, the regiment of us with half a battery of
artillery, a company of Sikhs, and a lot of civilians and women-folk.
There were ten thousand rebels round us, and they were as keen as a set
of terriers round a rat-cage. About the second week of it our water gave
out, and it was a question whether we could communicate with General
Neill's column, which was moving up country. It was our only chance, for
we could not hope to fight our way out with all the women and children,
so I volunteered to go out and to warn General Neill of our danger. My
offer was accepted, and I talked it over with Sergeant Barclay, who was
supposed to know the ground better than any other man, and who drew up
a route by which I might get through the rebel lines. At ten o'clock the
same night I started off upon my journey. There were a thousand lives to
save, but it was of only one that I was thinking when I dropped over the
wall that night.

"My way ran down a dried-up watercourse, which we hoped would screen
me from the enemy's sentries; but as I crept round the corner of it
I walked right into six of them, who were crouching down in the dark
waiting for me. In an instant I was stunned with a blow and bound hand
and foot. But the real blow was to my heart and not to my head, for as
I came to and listened to as much as I could understand of their talk,
I heard enough to tell me that my comrade, the very man who had arranged
the way that I was to take, had betrayed me by means of a native servant
into the hands of the enemy.

"Well, there's no need for me to dwell on that part of it. You know now
what James Barclay was capable of. Bhurtee was relieved by Neill next
day, but the rebels took me away with them in their retreat, and it was
many a long year before ever I saw a white face again. I was tortured
and tried to get away, and was captured and tortured again. You can see
for yourselves the state in which I was left. Some of them that fled
into Nepaul took me with them, and then afterwards I was up past
Darjeeling. The hill-folk up there murdered the rebels who had me, and
I became their slave for a time until I escaped; but instead of going
south I had to go north, until I found myself among the Afghans. There
I wandered about for many a year, and at last came back to the Punjab,
where I lived mostly among the natives and picked up a living by the
conjuring tricks that I had learned. What use was it for me, a wretched
cripple, to go back to England or to make myself known to my old
comrades? Even my wish for revenge would not make me do that. I had
rather that Nancy and my old pals should think of Harry Wood as having
died with a straight back, than see him living and crawling with a stick
like a chimpanzee. They never doubted that I was dead, and I meant that
they never should. I heard that Barclay had married Nancy, and that he
was rising rapidly in the regiment, but even that did not make me speak.

"But when one gets old one has a longing for home. For years I've been
dreaming of the bright green fields and the hedges of England. At last I
determined to see them before I died. I saved enough to bring me across,
and then I came here where the soldiers are, for I know their ways and
how to amuse them and so earn enough to keep me."

"Your narrative is most interesting," said Sherlock Holmes. "I have
already heard of your meeting with Mrs. Barclay, and your mutual
recognition. You then, as I understand, followed her home and saw
through the window an altercation between her husband and her, in which
she doubtless cast his conduct to you in his teeth. Your own feelings
overcame you, and you ran across the lawn and broke in upon them."

"I did, sir, and at the sight of me he looked as I have never seen a man
look before, and over he went with his head on the fender. But he was
dead before he fell. I read death on his face as plain as I can read
that text over the fire. The bare sight of me was like a bullet through
his guilty heart."

"And then?"

"Then Nancy fainted, and I caught up the key of the door from her hand,
intending to unlock it and get help. But as I was doing it it seemed to
me better to leave it alone and get away, for the thing might look black
against me, and any way my secret would be out if I were taken. In my
haste I thrust the key into my pocket, and dropped my stick while I was
chasing Teddy, who had run up the curtain. When I got him into his box,
from which he had slipped, I was off as fast as I could run."

"Who's Teddy?" asked Holmes.

The man leaned over and pulled up the front of a kind of hutch in
the corner. In an instant out there slipped a beautiful reddish-brown
creature, thin and lithe, with the legs of a stoat, a long, thin nose,
and a pair of the finest red eyes that ever I saw in an animal's head.

"It's a mongoose," I cried.

"Well, some call them that, and some call them ichneumon," said the
man. "Snake-catcher is what I call them, and Teddy is amazing quick on
cobras. I have one here without the fangs, and Teddy catches it every
night to please the folk in the canteen.

"Any other point, sir?"

"Well, we may have to apply to you again if Mrs. Barclay should prove to
be in serious trouble."

"In that case, of course, I'd come forward."

"But if not, there is no object in raking up this scandal against a
dead man, foully as he has acted. You have at least the satisfaction
of knowing that for thirty years of his life his conscience bitterly
reproached him for this wicked deed. Ah, there goes Major Murphy on the
other side of the street. Good-by, Wood. I want to learn if anything has
happened since yesterday."

We were in time to overtake the major before he reached the corner.

"Ah, Holmes," he said: "I suppose you have heard that all this fuss has
come to nothing?"

"What then?"

"The inquest is just over. The medical evidence showed conclusively
that death was due to apoplexy. You see it was quite a simple case after
all."

"Oh, remarkably superficial," said Holmes, smiling. "Come, Watson, I
don't think we shall be wanted in Aldershot any more."

"There's one thing," said I, as we walked down to the station. "If the
husband's name was James, and the other was Henry, what was this talk
about David?"

"That one word, my dear Watson, should have told me the whole story had
I been the ideal reasoner which you are so fond of depicting. It was
evidently a term of reproach."

"Of reproach?"

"Yes; David strayed a little occasionally, you know, and on one occasion
in the same direction as Sergeant James Barclay. You remember the small
affair of Uriah and Bathsheba? My biblical knowledge is a trifle rusty,
I fear, but you will find the story in the first or second of Samuel."




Adventure VIII. The Resident Patient


Glancing over the somewhat incoherent series of Memoirs with which I
have endeavored to illustrate a few of the mental peculiarities of my
friend Mr. Sherlock Holmes, I have been struck by the difficulty which I
have experienced in picking out examples which shall in every way answer
my purpose. For in those cases in which Holmes has performed some tour
de force of analytical reasoning, and has demonstrated the value of his
peculiar methods of investigation, the facts themselves have often been
so slight or so commonplace that I could not feel justified in laying
them before the public. On the other hand, it has frequently happened
that he has been concerned in some research where the facts have been of
the most remarkable and dramatic character, but where the share which he
has himself taken in determining their causes has been less pronounced
than I, as his biographer, could wish. The small matter which I have
chronicled under the heading of "A Study in Scarlet," and that other
later one connected with the loss of the Gloria Scott, may serve as
examples of this Scylla and Charybdis which are forever threatening the
historian. It may be that in the business of which I am now about to
write the part which my friend played is not sufficiently accentuated;
and yet the whole train of circumstances is so remarkable that I cannot
bring myself to omit it entirely from this series.

It had been a close, rainy day in October. Our blinds were half-drawn,
and Holmes lay curled upon the sofa, reading and re-reading a letter
which he had received by the morning post. For myself, my term of
service in India had trained me to stand heat better than cold, and
a thermometer of 90 was no hardship. But the paper was uninteresting.
Parliament had risen. Everybody was out of town, and I yearned for the
glades of the New Forest or the shingle of Southsea. A depleted bank
account had caused me to postpone my holiday, and as to my companion,
neither the country nor the sea presented the slightest attraction to
him. He loved to lie in the very centre of five millions of people, with
his filaments stretching out and running through them, responsive to
every little rumor or suspicion of unsolved crime. Appreciation of
Nature found no place among his many gifts, and his only change was
when he turned his mind from the evil-doer of the town to track down his
brother of the country.

Finding that Holmes was too absorbed for conversation, I had tossed
aside the barren paper, and leaning back in my chair, I fell into a
brown study. Suddenly my companion's voice broke in upon my thoughts.

"You are right, Watson," said he. "It does seem a very preposterous way
of settling a dispute."

"Most preposterous!" I exclaimed, and then, suddenly realizing how
he had echoed the inmost thought of my soul, I sat up in my chair and
stared at him in blank amazement.

"What is this, Holmes?" I cried. "This is beyond anything which I could
have imagined."

He laughed heartily at my perplexity.

"You remember," said he, "that some little time ago, when I read you the
passage in one of Poe's sketches, in which a close reasoner follows the
unspoken thought of his companion, you were inclined to treat the
matter as a mere tour de force of the author. On my remarking that I
was constantly in the habit of doing the same thing you expressed
incredulity."

"Oh, no!"

"Perhaps not with your tongue, my dear Watson, but certainly with your
eyebrows. So when I saw you throw down your paper and enter upon a train
of thought, I was very happy to have the opportunity of reading it
off, and eventually of breaking into it, as a proof that I had been in
rapport with you."

But I was still far from satisfied. "In the example which you read to
me," said I, "the reasoner drew his conclusions from the actions of the
man whom he observed. If I remember right, he stumbled over a heap
of stones, looked up at the stars, and so on. But I have been seated
quietly in my chair, and what clues can I have given you?"

"You do yourself an injustice. The features are given to man as the
means by which he shall express his emotions, and yours are faithful
servants."

"Do you mean to say that you read my train of thoughts from my
features?"

"Your features, and especially your eyes. Perhaps you cannot yourself
recall how your reverie commenced?"

"No, I cannot."

"Then I will tell you. After throwing down your paper, which was the
action which drew my attention to you, you sat for half a minute with
a vacant expression. Then your eyes fixed themselves upon your
newly-framed picture of General Gordon, and I saw by the alteration in
your face that a train of thought had been started. But it did not lead
very far. Your eyes turned across to the unframed portrait of Henry Ward
Beecher which stands upon the top of your books. You then glanced up at
the wall, and of course your meaning was obvious. You were thinking
that if the portrait were framed it would just cover that bare space and
correspond with Gordon's picture over there."

"You have followed me wonderfully!" I exclaimed.

"So far I could hardly have gone astray. But now your thoughts went
back to Beecher, and you looked hard across as if you were studying
the character in his features. Then your eyes ceased to pucker, but
you continued to look across, and your face was thoughtful. You were
recalling the incidents of Beecher's career. I was well aware that you
could not do this without thinking of the mission which he undertook
on behalf of the North at the time of the Civil War, for I remember
you expressing your passionate indignation at the way in which he was
received by the more turbulent of our people. You felt so strongly about
it that I knew you could not think of Beecher without thinking of that
also. When a moment later I saw your eyes wander away from the picture,
I suspected that your mind had now turned to the Civil War, and when
I observed that your lips set, your eyes sparkled, and your hands
clinched, I was positive that you were indeed thinking of the gallantry
which was shown by both sides in that desperate struggle. But then,
again, your face grew sadder; you shook your head. You were dwelling
upon the sadness and horror and useless waste of life. Your hand stole
towards your own old wound, and a smile quivered on your lips,
which showed me that the ridiculous side of this method of settling
international questions had forced itself upon your mind. At this point
I agreed with you that it was preposterous, and was glad to find that
all my deductions had been correct."

"Absolutely!" said I. "And now that you have explained it, I confess
that I am as amazed as before."

"It was very superficial, my dear Watson, I assure you. I should not
have intruded it upon your attention had you not shown some incredulity
the other day. But the evening has brought a breeze with it. What do you
say to a ramble through London?"

I was weary of our little sitting-room and gladly acquiesced. For
three hours we strolled about together, watching the ever-changing
kaleidoscope of life as it ebbs and flows through Fleet Street and the
Strand. His characteristic talk, with its keen observance of detail
and subtle power of inference held me amused and enthralled. It was ten
o'clock before we reached Baker Street again. A brougham was waiting at
our door.

"Hum! A doctor's--general practitioner, I perceive," said Holmes. "Not
been long in practice, but has had a good deal to do. Come to consult
us, I fancy! Lucky we came back!"

I was sufficiently conversant with Holmes's methods to be able to follow
his reasoning, and to see that the nature and state of the various
medical instruments in the wicker basket which hung in the lamplight
inside the brougham had given him the data for his swift deduction.
The light in our window above showed that this late visit was indeed
intended for us. With some curiosity as to what could have sent a
brother medico to us at such an hour, I followed Holmes into our
sanctum.

A pale, taper-faced man with sandy whiskers rose up from a chair by the
fire as we entered. His age may not have been more than three or four
and thirty, but his haggard expression and unhealthy hue told of a life
which has sapped his strength and robbed him of his youth. His manner
was nervous and shy, like that of a sensitive gentleman, and the thin
white hand which he laid on the mantelpiece as he rose was that of an
artist rather than of a surgeon. His dress was quiet and sombre--a black
frock-coat, dark trousers, and a touch of color about his necktie.

"Good-evening, doctor," said Holmes, cheerily. "I am glad to see that
you have only been waiting a very few minutes."

"You spoke to my coachman, then?"

"No, it was the candle on the side-table that told me. Pray resume your
seat and let me know how I can serve you."

"My name is Doctor Percy Trevelyan," said our visitor, "and I live at
403 Brook Street."

"Are you not the author of a monograph upon obscure nervous lesions?" I
asked.

His pale cheeks flushed with pleasure at hearing that his work was known
to me.

"I so seldom hear of the work that I thought it was quite dead," said
he. "My publishers gave me a most discouraging account of its sale. You
are yourself, I presume, a medical man?"

"A retired army surgeon."

"My own hobby has always been nervous disease. I should wish to make it
an absolute specialty, but, of course, a man must take what he can get
at first. This, however, is beside the question, Mr. Sherlock Holmes,
and I quite appreciate how valuable your time is. The fact is that a
very singular train of events has occurred recently at my house in Brook
Street, and to-night they came to such a head that I felt it was quite
impossible for me to wait another hour before asking for your advice and
assistance."

Sherlock Holmes sat down and lit his pipe. "You are very welcome
to both," said he. "Pray let me have a detailed account of what the
circumstances are which have disturbed you."

"One or two of them are so trivial," said Dr. Trevelyan, "that really
I am almost ashamed to mention them. But the matter is so inexplicable,
and the recent turn which it has taken is so elaborate, that I shall
lay it all before you, and you shall judge what is essential and what is
not.

"I am compelled, to begin with, to say something of my own college
career. I am a London University man, you know, and I am sure that your
will not think that I am unduly singing my own praises if I say that my
student career was considered by my professors to be a very promising
one. After I had graduated I continued to devote myself to research,
occupying a minor position in King's College Hospital, and I was
fortunate enough to excite considerable interest by my research into the
pathology of catalepsy, and finally to win the Bruce Pinkerton prize and
medal by the monograph on nervous lesions to which your friend has
just alluded. I should not go too far if I were to say that there was a
general impression at that time that a distinguished career lay before
me.

"But the one great stumbling-block lay in my want of capital. As you
will readily understand, a specialist who aims high is compelled to
start in one of a dozen streets in the Cavendish Square quarter, all
of which entail enormous rents and furnishing expenses. Besides this
preliminary outlay, he must be prepared to keep himself for some years,
and to hire a presentable carriage and horse. To do this was quite
beyond my power, and I could only hope that by economy I might in ten
years' time save enough to enable me to put up my plate. Suddenly,
however, an unexpected incident opened up quite a new prospect to me.

"This was a visit from a gentleman of the name of Blessington, who was a
complete stranger to me. He came up to my room one morning, and plunged
into business in an instant.

"'You are the same Percy Trevelyan who has had so distinguished a career
and won a great prize lately?' said he.

"I bowed.

"'Answer me frankly,' he continued, 'for you will find it to your
interest to do so. You have all the cleverness which makes a successful
man. Have you the tact?'

"I could not help smiling at the abruptness of the question.

"'I trust that I have my share,' I said.

"'Any bad habits? Not drawn towards drink, eh?'

"'Really, sir!' I cried.

"'Quite right! That's all right! But I was bound to ask. With all these
qualities, why are you not in practice?'

"I shrugged my shoulders.

"'Come, come!' said he, in his bustling way. 'It's the old story. More
in your brains than in your pocket, eh? What would you say if I were to
start you in Brook Street?'

"I stared at him in astonishment.

"'Oh, it's for my sake, not for yours,' he cried. 'I'll be perfectly
frank with you, and if it suits you it will suit me very well. I have a
few thousands to invest, d'ye see, and I think I'll sink them in you.'

"'But why?' I gasped.

"'Well, it's just like any other speculation, and safer than most.'

"'What am I to do, then?'

"'I'll tell you. I'll take the house, furnish it, pay the maids, and run
the whole place. All you have to do is just to wear out your chair in
the consulting-room. I'll let you have pocket-money and everything. Then
you hand over to me three quarters of what you earn, and you keep the
other quarter for yourself.'

"This was the strange proposal, Mr. Holmes, with which the man
Blessington approached me. I won't weary you with the account of how
we bargained and negotiated. It ended in my moving into the house next
Lady-day, and starting in practice on very much the same conditions as
he had suggested. He came himself to live with me in the character of a
resident patient. His heart was weak, it appears, and he needed constant
medical supervision. He turned the two best rooms of the first floor
into a sitting-room and bedroom for himself. He was a man of singular
habits, shunning company and very seldom going out. His life was
irregular, but in one respect he was regularity itself. Every evening,
at the same hour, he walked into the consulting-room, examined the
books, put down five and three-pence for every guinea that I had earned,
and carried the rest off to the strong-box in his own room.

"I may say with confidence that he never had occasion to regret his
speculation. From the first it was a success. A few good cases and the
reputation which I had won in the hospital brought me rapidly to the
front, and during the last few years I have made him a rich man.

"So much, Mr. Holmes, for my past history and my relations with Mr.
Blessington. It only remains for me now to tell you what has occurred to
bring me here to-night.

"Some weeks ago Mr. Blessington came down to me in, as it seemed to me,
a state of considerable agitation. He spoke of some burglary which, he
said, had been committed in the West End, and he appeared, I remember,
to be quite unnecessarily excited about it, declaring that a day should
not pass before we should add stronger bolts to our windows and doors.
For a week he continued to be in a peculiar state of restlessness,
peering continually out of the windows, and ceasing to take the short
walk which had usually been the prelude to his dinner. From his manner
it struck me that he was in mortal dread of something or somebody, but
when I questioned him upon the point he became so offensive that I was
compelled to drop the subject. Gradually, as time passed, his fears
appeared to die away, and he had renewed his former habits, when a fresh
event reduced him to the pitiable state of prostration in which he now
lies.

"What happened was this. Two days ago I received the letter which I now
read to you. Neither address nor date is attached to it.

"'A Russian nobleman who is now resident in England,' it runs, 'would
be glad to avail himself of the professional assistance of Dr. Percy
Trevelyan. He has been for some years a victim to cataleptic attacks, on
which, as is well known, Dr. Trevelyan is an authority. He proposes to
call at about quarter past six to-morrow evening, if Dr. Trevelyan will
make it convenient to be at home.'

"This letter interested me deeply, because the chief difficulty in the
study of catalepsy is the rareness of the disease. You may believe,
then, that I was in my consulting-room when, at the appointed hour, the
page showed in the patient.

"He was an elderly man, thin, demure, and commonplace--by no means the
conception one forms of a Russian nobleman. I was much more struck by
the appearance of his companion. This was a tall young man, surprisingly
handsome, with a dark, fierce face, and the limbs and chest of a
Hercules. He had his hand under the other's arm as they entered, and
helped him to a chair with a tenderness which one would hardly have
expected from his appearance.

"'You will excuse my coming in, doctor,' said he to me, speaking English
with a slight lisp. 'This is my father, and his health is a matter of
the most overwhelming importance to me.'

"I was touched by this filial anxiety. 'You would, perhaps, care to
remain during the consultation?' said I.

"'Not for the world,' he cried with a gesture of horror. 'It is more
painful to me than I can express. If I were to see my father in one of
these dreadful seizures I am convinced that I should never survive
it. My own nervous system is an exceptionally sensitive one. With your
permission, I will remain in the waiting-room while you go into my
father's case.'

"To this, of course, I assented, and the young man withdrew. The patient
and I then plunged into a discussion of his case, of which I took
exhaustive notes. He was not remarkable for intelligence, and his
answers were frequently obscure, which I attributed to his limited
acquaintance with our language. Suddenly, however, as I sat writing,
he ceased to give any answer at all to my inquiries, and on my turning
towards him I was shocked to see that he was sitting bolt upright in his
chair, staring at me with a perfectly blank and rigid face. He was again
in the grip of his mysterious malady.

"My first feeling, as I have just said, was one of pity and horror.
My second, I fear, was rather one of professional satisfaction. I made
notes of my patient's pulse and temperature, tested the rigidity of his
muscles, and examined his reflexes. There was nothing markedly abnormal
in any of these conditions, which harmonized with my former experiences.
I had obtained good results in such cases by the inhalation of nitrite
of amyl, and the present seemed an admirable opportunity of testing
its virtues. The bottle was downstairs in my laboratory, so leaving my
patient seated in his chair, I ran down to get it. There was some little
delay in finding it--five minutes, let us say--and then I returned.
Imagine my amazement to find the room empty and the patient gone.

"Of course, my first act was to run into the waiting-room. The son had
gone also. The hall door had been closed, but not shut. My page who
admits patients is a new boy and by no means quick. He waits downstairs,
and runs up to show patients out when I ring the consulting-room bell.
He had heard nothing, and the affair remained a complete mystery. Mr.
Blessington came in from his walk shortly afterwards, but I did not say
anything to him upon the subject, for, to tell the truth, I have got in
the way of late of holding as little communication with him as possible.

"Well, I never thought that I should see anything more of the Russian
and his son, so you can imagine my amazement when, at the very same hour
this evening, they both came marching into my consulting-room, just as
they had done before.

"'I feel that I owe you a great many apologies for my abrupt departure
yesterday, doctor,' said my patient.

"'I confess that I was very much surprised at it,' said I.

"'Well, the fact is,' he remarked, 'that when I recover from these
attacks my mind is always very clouded as to all that has gone before. I
woke up in a strange room, as it seemed to me, and made my way out into
the street in a sort of dazed way when you were absent.'

"'And I,' said the son, 'seeing my father pass the door of the
waiting-room, naturally thought that the consultation had come to an
end. It was not until we had reached home that I began to realize the
true state of affairs.'

"'Well,' said I, laughing, 'there is no harm done except that you
puzzled me terribly; so if you, sir, would kindly step into the
waiting-room I shall be happy to continue our consultation which was
brought to so abrupt an ending.'

"'For half an hour or so I discussed that old gentleman's symptoms with
him, and then, having prescribed for him, I saw him go off upon the arm
of his son.

"I have told you that Mr. Blessington generally chose this hour of the
day for his exercise. He came in shortly afterwards and passed upstairs.
An instant later I heard him running down, and he burst into my
consulting-room like a man who is mad with panic.

"'Who has been in my room?' he cried.

"'No one,' said I.

"'It's a lie! He yelled. 'Come up and look!'

"I passed over the grossness of his language, as he seemed half out of
his mind with fear. When I went upstairs with him he pointed to several
footprints upon the light carpet.

"'D'you mean to say those are mine?' he cried.

"They were certainly very much larger than any which he could have made,
and were evidently quite fresh. It rained hard this afternoon, as you
know, and my patients were the only people who called. It must have been
the case, then, that the man in the waiting-room had, for some unknown
reason, while I was busy with the other, ascended to the room of my
resident patient. Nothing had been touched or taken, but there were the
footprints to prove that the intrusion was an undoubted fact.

"Mr. Blessington seemed more excited over the matter than I should have
thought possible, though of course it was enough to disturb anybody's
peace of mind. He actually sat crying in an arm-chair, and I could
hardly get him to speak coherently. It was his suggestion that I should
come round to you, and of course I at once saw the propriety of it,
for certainly the incident is a very singular one, though he appears to
completely overrate its importance. If you would only come back with me
in my brougham, you would at least be able to soothe him, though I
can hardly hope that you will be able to explain this remarkable
occurrence."

Sherlock Holmes had listened to this long narrative with an intentness
which showed me that his interest was keenly aroused. His face was as
impassive as ever, but his lids had drooped more heavily over his eyes,
and his smoke had curled up more thickly from his pipe to emphasize each
curious episode in the doctor's tale. As our visitor concluded, Holmes
sprang up without a word, handed me my hat, picked his own from the
table, and followed Dr. Trevelyan to the door. Within a quarter of an
hour we had been dropped at the door of the physician's residence
in Brook Street, one of those sombre, flat-faced houses which one
associates with a West-End practice. A small page admitted us, and we
began at once to ascend the broad, well-carpeted stair.

But a singular interruption brought us to a standstill. The light at
the top was suddenly whisked out, and from the darkness came a reedy,
quivering voice.

"I have a pistol," it cried. "I give you my word that I'll fire if you
come any nearer."

"This really grows outrageous, Mr. Blessington," cried Dr. Trevelyan.

"Oh, then it is you, doctor," said the voice, with a great heave of
relief. "But those other gentlemen, are they what they pretend to be?"

We were conscious of a long scrutiny out of the darkness.

"Yes, yes, it's all right," said the voice at last. "You can come up,
and I am sorry if my precautions have annoyed you."

He relit the stair gas as he spoke, and we saw before us a
singular-looking man, whose appearance, as well as his voice, testified
to his jangled nerves. He was very fat, but had apparently at some time
been much fatter, so that the skin hung about his face in loose pouches,
like the cheeks of a blood-hound. He was of a sickly color, and his
thin, sandy hair seemed to bristle up with the intensity of his emotion.
In his hand he held a pistol, but he thrust it into his pocket as we
advanced.

"Good-evening, Mr. Holmes," said he. "I am sure I am very much obliged
to you for coming round. No one ever needed your advice more than I do.
I suppose that Dr. Trevelyan has told you of this most unwarrantable
intrusion into my rooms."

"Quite so," said Holmes. "Who are these two men Mr. Blessington, and why
do they wish to molest you?"

"Well, well," said the resident patient, in a nervous fashion, "of
course it is hard to say that. You can hardly expect me to answer that,
Mr. Holmes."

"Do you mean that you don't know?"

"Come in here, if you please. Just have the kindness to step in here."

He led the way into his bedroom, which was large and comfortably
furnished.

"You see that," said he, pointing to a big black box at the end of his
bed. "I have never been a very rich man, Mr. Holmes--never made but
one investment in my life, as Dr. Trevelyan would tell you. But I don't
believe in bankers. I would never trust a banker, Mr. Holmes. Between
ourselves, what little I have is in that box, so you can understand what
it means to me when unknown people force themselves into my rooms."

Holmes looked at Blessington in his questioning way and shook his head.

"I cannot possibly advise you if you try to deceive me," said he.

"But I have told you everything."

Holmes turned on his heel with a gesture of disgust. "Good-night, Dr.
Trevelyan," said he.

"And no advice for me?" cried Blessington, in a breaking voice.

"My advice to you, sir, is to speak the truth."

A minute later we were in the street and walking for home. We had
crossed Oxford Street and were half way down Harley Street before I
could get a word from my companion.

"Sorry to bring you out on such a fool's errand, Watson," he said at
last. "It is an interesting case, too, at the bottom of it."

"I can make little of it," I confessed.

"Well, it is quite evident that there are two men--more, perhaps, but
at least two--who are determined for some reason to get at this fellow
Blessington. I have no doubt in my mind that both on the first and on
the second occasion that young man penetrated to Blessington's room,
while his confederate, by an ingenious device, kept the doctor from
interfering."

"And the catalepsy?"

"A fraudulent imitation, Watson, though I should hardly dare to hint as
much to our specialist. It is a very easy complaint to imitate. I have
done it myself."

"And then?"

"By the purest chance Blessington was out on each occasion. Their reason
for choosing so unusual an hour for a consultation was obviously to
insure that there should be no other patient in the waiting-room. It
just happened, however, that this hour coincided with Blessington's
constitutional, which seems to show that they were not very well
acquainted with his daily routine. Of course, if they had been merely
after plunder they would at least have made some attempt to search for
it. Besides, I can read in a man's eye when it is his own skin that he
is frightened for. It is inconceivable that this fellow could have made
two such vindictive enemies as these appear to be without knowing of it.
I hold it, therefore, to be certain that he does know who these men are,
and that for reasons of his own he suppresses it. It is just possible
that to-morrow may find him in a more communicative mood."

"Is there not one alternative," I suggested, "grotesquely improbably,
no doubt, but still just conceivable? Might the whole story of the
cataleptic Russian and his son be a concoction of Dr. Trevelyan's, who
has, for his own purposes, been in Blessington's rooms?"

I saw in the gaslight that Holmes wore an amused smile at this brilliant
departure of mine.

"My dear fellow," said he, "it was one of the first solutions which
occurred to me, but I was soon able to corroborate the doctor's tale.
This young man has left prints upon the stair-carpet which made it quite
superfluous for me to ask to see those which he had made in the room.
When I tell you that his shoes were square-toed instead of being pointed
like Blessington's, and were quite an inch and a third longer than the
doctor's, you will acknowledge that there can be no doubt as to his
individuality. But we may sleep on it now, for I shall be surprised if
we do not hear something further from Brook Street in the morning."


Sherlock Holmes's prophecy was soon fulfilled, and in a dramatic
fashion. At half-past seven next morning, in the first glimmer of
daylight, I found him standing by my bedside in his dressing-gown.

"There's a brougham waiting for us, Watson," said he.

"What's the matter, then?"

"The Brook Street business."

"Any fresh news?"

"Tragic, but ambiguous," said he, pulling up the blind. "Look at this--a
sheet from a note-book, with 'For God's sake come at once--P. T.,'
scrawled upon it in pencil. Our friend, the doctor, was hard put to
it when he wrote this. Come along, my dear fellow, for it's an urgent
call."

In a quarter of an hour or so we were back at the physician's house. He
came running out to meet us with a face of horror.

"Oh, such a business!" he cried, with his hands to his temples.

"What then?"

"Blessington has committed suicide!"

Holmes whistled.

"Yes, he hanged himself during the night."

We had entered, and the doctor had preceded us into what was evidently
his waiting-room.

"I really hardly know what I am doing," he cried. "The police are
already upstairs. It has shaken me most dreadfully."

"When did you find it out?"

"He has a cup of tea taken in to him early every morning. When the maid
entered, about seven, there the unfortunate fellow was hanging in the
middle of the room. He had tied his cord to the hook on which the heavy
lamp used to hang, and he had jumped off from the top of the very box
that he showed us yesterday."

Holmes stood for a moment in deep thought.

"With your permission," said he at last, "I should like to go upstairs
and look into the matter."

We both ascended, followed by the doctor.

It was a dreadful sight which met us as we entered the bedroom door. I
have spoken of the impression of flabbiness which this man Blessington
conveyed. As he dangled from the hook it was exaggerated and intensified
until he was scarce human in his appearance. The neck was drawn out
like a plucked chicken's, making the rest of him seem the more obese and
unnatural by the contrast. He was clad only in his long night-dress, and
his swollen ankles and ungainly feet protruded starkly from beneath it.
Beside him stood a smart-looking police-inspector, who was taking notes
in a pocket-book.

"Ah, Mr. Holmes," said he, heartily, as my friend entered, "I am
delighted to see you."

"Good-morning, Lanner," answered Holmes; "you won't think me an
intruder, I am sure. Have you heard of the events which led up to this
affair?"

"Yes, I heard something of them."

"Have you formed any opinion?"

"As far as I can see, the man has been driven out of his senses by
fright. The bed has been well slept in, you see. There's his impression
deep enough. It's about five in the morning, you know, that suicides are
most common. That would be about his time for hanging himself. It seems
to have been a very deliberate affair."

"I should say that he has been dead about three hours, judging by the
rigidity of the muscles," said I.

"Noticed anything peculiar about the room?" asked Holmes.

"Found a screw-driver and some screws on the wash-hand stand. Seems to
have smoked heavily during the night, too. Here are four cigar-ends that
I picked out of the fireplace."

"Hum!" said Holmes, "have you got his cigar-holder?"

"No, I have seen none."

"His cigar-case, then?"

"Yes, it was in his coat-pocket."

Holmes opened it and smelled the single cigar which it contained.

"Oh, this is an Havana, and these others are cigars of the peculiar sort
which are imported by the Dutch from their East Indian colonies. They
are usually wrapped in straw, you know, and are thinner for their length
than any other brand." He picked up the four ends and examined them with
his pocket-lens.

"Two of these have been smoked from a holder and two without," said he.
"Two have been cut by a not very sharp knife, and two have had the ends
bitten off by a set of excellent teeth. This is no suicide, Mr. Lanner.
It is a very deeply planned and cold-blooded murder."

"Impossible!" cried the inspector.

"And why?"

"Why should any one murder a man in so clumsy a fashion as by hanging
him?"

"That is what we have to find out."

"How could they get in?"

"Through the front door."

"It was barred in the morning."

"Then it was barred after them."

"How do you know?"

"I saw their traces. Excuse me a moment, and I may be able to give you
some further information about it."

He went over to the door, and turning the lock he examined it in his
methodical way. Then he took out the key, which was on the inside, and
inspected that also. The bed, the carpet, the chairs the mantelpiece,
the dead body, and the rope were each in turn examined, until at last he
professed himself satisfied, and with my aid and that of the inspector
cut down the wretched object and laid it reverently under a sheet.

"How about this rope?" he asked.

"It is cut off this," said Dr. Trevelyan, drawing a large coil from
under the bed. "He was morbidly nervous of fire, and always kept this
beside him, so that he might escape by the window in case the stairs
were burning."

"That must have saved them trouble," said Holmes, thoughtfully. "Yes,
the actual facts are very plain, and I shall be surprised if by the
afternoon I cannot give you the reasons for them as well. I will take
this photograph of Blessington, which I see upon the mantelpiece, as it
may help me in my inquiries."

"But you have told us nothing!" cried the doctor.

"Oh, there can be no doubt as to the sequence of events," said Holmes.
"There were three of them in it: the young man, the old man, and a
third, to whose identity I have no clue. The first two, I need hardly
remark, are the same who masqueraded as the Russian count and his son,
so we can give a very full description of them. They were admitted by
a confederate inside the house. If I might offer you a word of advice,
Inspector, it would be to arrest the page, who, as I understand, has
only recently come into your service, Doctor."

"The young imp cannot be found," said Dr. Trevelyan; "the maid and the
cook have just been searching for him."

Holmes shrugged his shoulders.

"He has played a not unimportant part in this drama," said he. "The
three men having ascended the stairs, which they did on tiptoe, the
elder man first, the younger man second, and the unknown man in the
rear--"

"My dear Holmes!" I ejaculated.

"Oh, there could be no question as to the superimposing of the
footmarks. I had the advantage of learning which was which last night.
They ascended, then, to Mr. Blessington's room, the door of which they
found to be locked. With the help of a wire, however, they forced round
the key. Even without the lens you will perceive, by the scratches on
this ward, where the pressure was applied.

"On entering the room their first proceeding must have been to gag Mr.
Blessington. He may have been asleep, or he may have been so paralyzed
with terror as to have been unable to cry out. These walls are thick,
and it is conceivable that his shriek, if he had time to utter one, was
unheard.

"Having secured him, it is evident to me that a consultation of some
sort was held. Probably it was something in the nature of a judicial
proceeding. It must have lasted for some time, for it was then that
these cigars were smoked. The older man sat in that wicker chair; it
was he who used the cigar-holder. The younger man sat over yonder; he
knocked his ash off against the chest of drawers. The third fellow paced
up and down. Blessington, I think, sat upright in the bed, but of that I
cannot be absolutely certain.

"Well, it ended by their taking Blessington and hanging him. The matter
was so prearranged that it is my belief that they brought with them
some sort of block or pulley which might serve as a gallows. That
screw-driver and those screws were, as I conceive, for fixing it up.
Seeing the hook, however they naturally saved themselves the trouble.
Having finished their work they made off, and the door was barred behind
them by their confederate."

We had all listened with the deepest interest to this sketch of the
night's doings, which Holmes had deduced from signs so subtle and minute
that, even when he had pointed them out to us, we could scarcely follow
him in his reasoning. The inspector hurried away on the instant to make
inquiries about the page, while Holmes and I returned to Baker Street
for breakfast.

"I'll be back by three," said he, when we had finished our meal. "Both
the inspector and the doctor will meet me here at that hour, and I hope
by that time to have cleared up any little obscurity which the case may
still present."


Our visitors arrived at the appointed time, but it was a quarter to
four before my friend put in an appearance. From his expression as he
entered, however, I could see that all had gone well with him.

"Any news, Inspector?"

"We have got the boy, sir."

"Excellent, and I have got the men."

"You have got them!" we cried, all three.

"Well, at least I have got their identity. This so-called Blessington
is, as I expected, well known at headquarters, and so are his
assailants. Their names are Biddle, Hayward, and Moffat."

"The Worthingdon bank gang," cried the inspector.

"Precisely," said Holmes.

"Then Blessington must have been Sutton."

"Exactly," said Holmes.

"Why, that makes it as clear as crystal," said the inspector.

But Trevelyan and I looked at each other in bewilderment.

"You must surely remember the great Worthingdon bank business," said
Holmes. "Five men were in it--these four and a fifth called Cartwright.
Tobin, the care-taker, was murdered, and the thieves got away with seven
thousand pounds. This was in 1875. They were all five arrested, but the
evidence against them was by no means conclusive. This Blessington or
Sutton, who was the worst of the gang, turned informer. On his evidence
Cartwright was hanged and the other three got fifteen years apiece. When
they got out the other day, which was some years before their full term,
they set themselves, as you perceive, to hunt down the traitor and to
avenge the death of their comrade upon him. Twice they tried to get at
him and failed; a third time, you see, it came off. Is there anything
further which I can explain, Dr. Trevelyan?"

"I think you have made it all remarkable clear," said the doctor. "No
doubt the day on which he was perturbed was the day when he had seen of
their release in the newspapers."

"Quite so. His talk about a burglary was the merest blind."

"But why could he not tell you this?"

"Well, my dear sir, knowing the vindictive character of his old
associates, he was trying to hide his own identity from everybody as
long as he could. His secret was a shameful one, and he could not bring
himself to divulge it. However, wretch as he was, he was still living
under the shield of British law, and I have no doubt, Inspector, that
you will see that, though that shield may fail to guard, the sword of
justice is still there to avenge."


Such were the singular circumstances in connection with the Resident
Patient and the Brook Street Doctor. From that night nothing has
been seen of the three murderers by the police, and it is surmised
at Scotland Yard that they were among the passengers of the ill-fated
steamer Norah Creina, which was lost some years ago with all hands
upon the Portuguese coast, some leagues to the north of Oporto. The
proceedings against the page broke down for want of evidence, and the
Brook Street Mystery, as it was called, has never until now been fully
dealt with in any public print.




Adventure IX. The Greek Interpreter


During my long and intimate acquaintance with Mr. Sherlock Holmes I had
never heard him refer to his relations, and hardly ever to his own early
life. This reticence upon his part had increased the somewhat inhuman
effect which he produced upon me, until sometimes I found myself
regarding him as an isolated phenomenon, a brain without a heart, as
deficient in human sympathy as he was pre-eminent in intelligence. His
aversion to women and his disinclination to form new friendships were
both typical of his unemotional character, but not more so than his
complete suppression of every reference to his own people. I had come to
believe that he was an orphan with no relatives living, but one day, to
my very great surprise, he began to talk to me about his brother.

It was after tea on a summer evening, and the conversation, which had
roamed in a desultory, spasmodic fashion from golf clubs to the causes
of the change in the obliquity of the ecliptic, came round at last
to the question of atavism and hereditary aptitudes. The point under
discussion was, how far any singular gift in an individual was due to
his ancestry and how far to his own early training.

"In your own case," said I, "from all that you have told me, it seems
obvious that your faculty of observation and your peculiar facility for
deduction are due to your own systematic training."

"To some extent," he answered, thoughtfully. "My ancestors were country
squires, who appear to have led much the same life as is natural to
their class. But, none the less, my turn that way is in my veins, and
may have come with my grandmother, who was the sister of Vernet, the
French artist. Art in the blood is liable to take the strangest forms."

"But how do you know that it is hereditary?"

"Because my brother Mycroft possesses it in a larger degree than I do."

This was news to me indeed. If there were another man with such singular
powers in England, how was it that neither police nor public had heard
of him? I put the question, with a hint that it was my companion's
modesty which made him acknowledge his brother as his superior. Holmes
laughed at my suggestion.

"My dear Watson," said he, "I cannot agree with those who rank modesty
among the virtues. To the logician all things should be seen exactly as
they are, and to underestimate one's self is as much a departure from
truth as to exaggerate one's own powers. When I say, therefore, that
Mycroft has better powers of observation than I, you may take it that I
am speaking the exact and literal truth."

"Is he your junior?"

"Seven years my senior."

"How comes it that he is unknown?"

"Oh, he is very well known in his own circle."

"Where, then?"

"Well, in the Diogenes Club, for example."

I had never heard of the institution, and my face must have proclaimed
as much, for Sherlock Holmes pulled out his watch.

"The Diogenes Club is the queerest club in London, and Mycroft one of
the queerest men. He's always there from quarter to five to twenty to
eight. It's six now, so if you care for a stroll this beautiful evening
I shall be very happy to introduce you to two curiosities."

Five minutes later we were in the street, walking towards Regent's
Circus.

"You wonder," said my companion, "why it is that Mycroft does not use
his powers for detective work. He is incapable of it."

"But I thought you said--"

"I said that he was my superior in observation and deduction. If the
art of the detective began and ended in reasoning from an arm-chair, my
brother would be the greatest criminal agent that ever lived. But he has
no ambition and no energy. He will not even go out of his way to verify
his own solutions, and would rather be considered wrong than take the
trouble to prove himself right. Again and again I have taken a problem
to him, and have received an explanation which has afterwards proved to
be the correct one. And yet he was absolutely incapable of working out
the practical points which must be gone into before a case could be laid
before a judge or jury."

"It is not his profession, then?"

"By no means. What is to me a means of livelihood is to him the merest
hobby of a dilettante. He has an extraordinary faculty for figures, and
audits the books in some of the government departments. Mycroft lodges
in Pall Mall, and he walks round the corner into Whitehall every morning
and back every evening. From year's end to year's end he takes no other
exercise, and is seen nowhere else, except only in the Diogenes Club,
which is just opposite his rooms."

"I cannot recall the name."

"Very likely not. There are many men in London, you know, who, some from
shyness, some from misanthropy, have no wish for the company of their
fellows. Yet they are not averse to comfortable chairs and the latest
periodicals. It is for the convenience of these that the Diogenes Club
was started, and it now contains the most unsociable and unclubable men
in town. No member is permitted to take the least notice of any
other one. Save in the Stranger's Room, no talking is, under any
circumstances, allowed, and three offences, if brought to the notice of
the committee, render the talker liable to expulsion. My brother was one
of the founders, and I have myself found it a very soothing atmosphere."

We had reached Pall Mall as we talked, and were walking down it from the
St. James's end. Sherlock Holmes stopped at a door some little distance
from the Carlton, and, cautioning me not to speak, he led the way into
the hall. Through the glass paneling I caught a glimpse of a large and
luxurious room, in which a considerable number of men were sitting about
and reading papers, each in his own little nook. Holmes showed me into a
small chamber which looked out into Pall Mall, and then, leaving me for
a minute, he came back with a companion whom I knew could only be his
brother.

Mycroft Holmes was a much larger and stouter man than Sherlock. His body
was absolutely corpulent, but his face, though massive, had preserved
something of the sharpness of expression which was so remarkable in that
of his brother. His eyes, which were of a peculiarly light, watery gray,
seemed to always retain that far-away, introspective look which I had
only observed in Sherlock's when he was exerting his full powers.

"I am glad to meet you, sir," said he, putting out a broad, fat hand
like the flipper of a seal. "I hear of Sherlock everywhere since you
became his chronicler. By the way, Sherlock, I expected to see you round
last week, to consult me over that Manor House case. I thought you might
be a little out of your depth."

"No, I solved it," said my friend, smiling.

"It was Adams, of course."

"Yes, it was Adams."

"I was sure of it from the first." The two sat down together in the
bow-window of the club. "To any one who wishes to study mankind this is
the spot," said Mycroft. "Look at the magnificent types! Look at these
two men who are coming towards us, for example."

"The billiard-marker and the other?"

"Precisely. What do you make of the other?"

The two men had stopped opposite the window. Some chalk marks over the
waistcoat pocket were the only signs of billiards which I could see
in one of them. The other was a very small, dark fellow, with his hat
pushed back and several packages under his arm.

"An old soldier, I perceive," said Sherlock.

"And very recently discharged," remarked the brother.

"Served in India, I see."

"And a non-commissioned officer."

"Royal Artillery, I fancy," said Sherlock.

"And a widower."

"But with a child."

"Children, my dear boy, children."

"Come," said I, laughing, "this is a little too much."

"Surely," answered Holmes, "it is not hard to say that a man with that
bearing, expression of authority, and sunbaked skin, is a soldier, is
more than a private, and is not long from India."

"That he has not left the service long is shown by his still wearing his
ammunition boots, as they are called," observed Mycroft.

"He had not the cavalry stride, yet he wore his hat on one side, as
is shown by the lighter skin of that side of his brow. His weight is
against his being a sapper. He is in the artillery."

"Then, of course, his complete mourning shows that he has lost some one
very dear. The fact that he is doing his own shopping looks as though
it were his wife. He has been buying things for children, you perceive.
There is a rattle, which shows that one of them is very young. The wife
probably died in childbed. The fact that he has a picture-book under his
arm shows that there is another child to be thought of."

I began to understand what my friend meant when he said that his brother
possessed even keener faculties that he did himself. He glanced across
at me and smiled. Mycroft took snuff from a tortoise-shell box, and
brushed away the wandering grains from his coat front with a large, red
silk handkerchief.

"By the way, Sherlock," said he, "I have had something quite after your
own heart--a most singular problem--submitted to my judgment. I really
had not the energy to follow it up save in a very incomplete fashion,
but it gave me a basis for some pleasing speculation. If you would care
to hear the facts--"

"My dear Mycroft, I should be delighted."

The brother scribbled a note upon a leaf of his pocket-book, and,
ringing the bell, he handed it to the waiter.

"I have asked Mr. Melas to step across," said he. "He lodges on the
floor above me, and I have some slight acquaintance with him, which led
him to come to me in his perplexity. Mr. Melas is a Greek by extraction,
as I understand, and he is a remarkable linguist. He earns his living
partly as interpreter in the law courts and partly by acting as guide to
any wealthy Orientals who may visit the Northumberland Avenue hotels. I
think I will leave him to tell his very remarkable experience in his own
fashion."

A few minutes later we were joined by a short, stout man whose olive
face and coal-black hair proclaimed his Southern origin, though his
speech was that of an educated Englishman. He shook hands eagerly
with Sherlock Holmes, and his dark eyes sparkled with pleasure when he
understood that the specialist was anxious to hear his story.

"I do not believe that the police credit me--on my word, I do not," said
he in a wailing voice. "Just because they have never heard of it before,
they think that such a thing cannot be. But I know that I shall never
be easy in my mind until I know what has become of my poor man with the
sticking-plaster upon his face."

"I am all attention," said Sherlock Holmes.

"This is Wednesday evening," said Mr. Melas. "Well then, it was Monday
night--only two days ago, you understand--that all this happened. I am
an interpreter, as perhaps my neighbor there has told you. I interpret
all languages--or nearly all--but as I am a Greek by birth and with a
Grecian name, it is with that particular tongue that I am principally
associated. For many years I have been the chief Greek interpreter in
London, and my name is very well known in the hotels.

"It happens not unfrequently that I am sent for at strange hours by
foreigners who get into difficulties, or by travelers who arrive late
and wish my services. I was not surprised, therefore, on Monday night
when a Mr. Latimer, a very fashionably dressed young man, came up to my
rooms and asked me to accompany him in a cab which was waiting at the
door. A Greek friend had come to see him upon business, he said, and
as he could speak nothing but his own tongue, the services of an
interpreter were indispensable. He gave me to understand that his house
was some little distance off, in Kensington, and he seemed to be in a
great hurry, bustling me rapidly into the cab when we had descended to
the street.

"I say into the cab, but I soon became doubtful as to whether it was not
a carriage in which I found myself. It was certainly more roomy than
the ordinary four-wheeled disgrace to London, and the fittings, though
frayed, were of rich quality. Mr. Latimer seated himself opposite to me
and we started off through Charing Cross and up the Shaftesbury Avenue.
We had come out upon Oxford Street and I had ventured some remark as to
this being a roundabout way to Kensington, when my words were arrested
by the extraordinary conduct of my companion.

"He began by drawing a most formidable-looking bludgeon loaded with lead
from his pocket, and switching it backward and forward several times,
as if to test its weight and strength. Then he placed it without a word
upon the seat beside him. Having done this, he drew up the windows on
each side, and I found to my astonishment that they were covered with
paper so as to prevent my seeing through them.

"'I am sorry to cut off your view, Mr. Melas,' said he. 'The fact is
that I have no intention that you should see what the place is to which
we are driving. It might possibly be inconvenient to me if you could
find your way there again.'

"As you can imagine, I was utterly taken aback by such an address. My
companion was a powerful, broad-shouldered young fellow, and, apart from
the weapon, I should not have had the slightest chance in a struggle
with him.

"'This is very extraordinary conduct, Mr. Latimer,' I stammered. 'You
must be aware that what you are doing is quite illegal.'

"'It is somewhat of a liberty, no doubt,' said he, 'but we'll make it
up to you. I must warn you, however, Mr. Melas, that if at any time
to-night you attempt to raise an alarm or do anything which is against
my interests, you will find it a very serious thing. I beg you to
remember that no one knows where you are, and that, whether you are in
this carriage or in my house, you are equally in my power.'

"His words were quiet, but he had a rasping way of saying them which
was very menacing. I sat in silence wondering what on earth could be
his reason for kidnapping me in this extraordinary fashion. Whatever it
might be, it was perfectly clear that there was no possible use in my
resisting, and that I could only wait to see what might befall.

"For nearly two hours we drove without my having the least clue as to
where we were going. Sometimes the rattle of the stones told of a paved
causeway, and at others our smooth, silent course suggested asphalt;
but, save by this variation in sound, there was nothing at all which
could in the remotest way help me to form a guess as to where we were.
The paper over each window was impenetrable to light, and a blue curtain
was drawn across the glass work in front. It was a quarter-past seven
when we left Pall Mall, and my watch showed me that it was ten minutes
to nine when we at last came to a standstill. My companion let down
the window, and I caught a glimpse of a low, arched doorway with a lamp
burning above it. As I was hurried from the carriage it swung open, and
I found myself inside the house, with a vague impression of a lawn
and trees on each side of me as I entered. Whether these were private
grounds, however, or bona-fide country was more than I could possibly
venture to say.

"There was a colored gas-lamp inside which was turned so low that I
could see little save that the hall was of some size and hung with
pictures. In the dim light I could make out that the person who had
opened the door was a small, mean-looking, middle-aged man with rounded
shoulders. As he turned towards us the glint of the light showed me that
he was wearing glasses.

"'Is this Mr. Melas, Harold?' said he.

"'Yes.'

"'Well done, well done! No ill-will, Mr. Melas, I hope, but we could not
get on without you. If you deal fair with us you'll not regret it,
but if you try any tricks, God help you!' He spoke in a nervous, jerky
fashion, and with little giggling laughs in between, but somehow he
impressed me with fear more than the other.

"'What do you want with me?' I asked.

"'Only to ask a few questions of a Greek gentleman who is visiting us,
and to let us have the answers. But say no more than you are told to
say, or--' here came the nervous giggle again--'you had better never
have been born.'

"As he spoke he opened a door and showed the way into a room which
appeared to be very richly furnished, but again the only light was
afforded by a single lamp half-turned down. The chamber was certainly
large, and the way in which my feet sank into the carpet as I stepped
across it told me of its richness. I caught glimpses of velvet chairs, a
high white marble mantel-piece, and what seemed to be a suit of Japanese
armor at one side of it. There was a chair just under the lamp, and the
elderly man motioned that I should sit in it. The younger had left
us, but he suddenly returned through another door, leading with him
a gentleman clad in some sort of loose dressing-gown who moved slowly
towards us. As he came into the circle of dim light which enables me to
see him more clearly I was thrilled with horror at his appearance. He
was deadly pale and terribly emaciated, with the protruding, brilliant
eyes of a man whose spirit was greater than his strength. But what
shocked me more than any signs of physical weakness was that his face
was grotesquely criss-crossed with sticking-plaster, and that one large
pad of it was fastened over his mouth.

"'Have you the slate, Harold?' cried the older man, as this strange
being fell rather than sat down into a chair. 'Are his hands loose? Now,
then, give him the pencil. You are to ask the questions, Mr. Melas, and
he will write the answers. Ask him first of all whether he is prepared
to sign the papers?'

"The man's eyes flashed fire.

"'Never!' he wrote in Greek upon the slate.

"'On no condition?' I asked, at the bidding of our tyrant.

"'Only if I see her married in my presence by a Greek priest whom I
know.'

"The man giggled in his venomous way.

"'You know what awaits you, then?'

"'I care nothing for myself.'

"These are samples of the questions and answers which made up our
strange half-spoken, half-written conversation. Again and again I had to
ask him whether he would give in and sign the documents. Again and again
I had the same indignant reply. But soon a happy thought came to me. I
took to adding on little sentences of my own to each question, innocent
ones at first, to test whether either of our companions knew anything
of the matter, and then, as I found that they showed no signs I played a
more dangerous game. Our conversation ran something like this:

"'You can do no good by this obstinacy. Who are you?'

"'I care not. I am a stranger in London.'

"'Your fate will be upon your own head. How long have you been here?'

"'Let it be so. Three weeks.'

"'The property can never be yours. What ails you?'

"'It shall not go to villains. They are starving me.'

"'You shall go free if you sign. What house is this?'

"'I will never sign. I do not know.'

"'You are not doing her any service. What is your name?'

"'Let me hear her say so. Kratides.'

"'You shall see her if you sign. Where are you from?'

"'Then I shall never see her. Athens.'

"Another five minutes, Mr. Holmes, and I should have wormed out the
whole story under their very noses. My very next question might have
cleared the matter up, but at that instant the door opened and a woman
stepped into the room. I could not see her clearly enough to know more
than that she was tall and graceful, with black hair, and clad in some
sort of loose white gown.

"'Harold,' said she, speaking English with a broken accent. 'I could not
stay away longer. It is so lonely up there with only--Oh, my God, it is
Paul!'

"These last words were in Greek, and at the same instant the man with
a convulsive effort tore the plaster from his lips, and screaming out
'Sophy! Sophy!' rushed into the woman's arms. Their embrace was but for
an instant, however, for the younger man seized the woman and pushed
her out of the room, while the elder easily overpowered his emaciated
victim, and dragged him away through the other door. For a moment I was
left alone in the room, and I sprang to my feet with some vague idea
that I might in some way get a clue to what this house was in which I
found myself. Fortunately, however, I took no steps, for looking up I
saw that the older man was standing in the door-way with his eyes fixed
upon me.

"'That will do, Mr. Melas,' said he. 'You perceive that we have taken
you into our confidence over some very private business. We should not
have troubled you, only that our friend who speaks Greek and who began
these negotiations has been forced to return to the East. It was
quite necessary for us to find some one to take his place, and we were
fortunate in hearing of your powers.'

"I bowed.

"'There are five sovereigns here,' said he, walking up to me, 'which
will, I hope, be a sufficient fee. But remember,' he added, tapping me
lightly on the chest and giggling, 'if you speak to a human soul about
this--one human soul, mind--well, may God have mercy upon your soul!"

"I cannot tell you the loathing and horror with which this
insignificant-looking man inspired me. I could see him better now as the
lamp-light shone upon him. His features were peaky and sallow, and his
little pointed beard was thready and ill-nourished. He pushed his face
forward as he spoke and his lips and eyelids were continually twitching
like a man with St. Vitus's dance. I could not help thinking that his
strange, catchy little laugh was also a symptom of some nervous malady.
The terror of his face lay in his eyes, however, steel gray, and
glistening coldly with a malignant, inexorable cruelty in their depths.

"'We shall know if you speak of this,' said he. 'We have our own means
of information. Now you will find the carriage waiting, and my friend
will see you on your way.'

"I was hurried through the hall and into the vehicle, again obtaining
that momentary glimpse of trees and a garden. Mr. Latimer followed
closely at my heels, and took his place opposite to me without a word.
In silence we again drove for an interminable distance with the windows
raised, until at last, just after midnight, the carriage pulled up.

"'You will get down here, Mr. Melas,' said my companion. 'I am sorry
to leave you so far from your house, but there is no alternative. Any
attempt upon your part to follow the carriage can only end in injury to
yourself.'

"He opened the door as he spoke, and I had hardly time to spring out
when the coachman lashed the horse and the carriage rattled away. I
looked around me in astonishment. I was on some sort of a heathy common
mottled over with dark clumps of furze-bushes. Far away stretched a
line of houses, with a light here and there in the upper windows. On the
other side I saw the red signal-lamps of a railway.

"The carriage which had brought me was already out of sight. I stood
gazing round and wondering where on earth I might be, when I saw some
one coming towards me in the darkness. As he came up to me I made out
that he was a railway porter.

"'Can you tell me what place this is?' I asked.

"'Wandsworth Common,' said he.

"'Can I get a train into town?'

"'If you walk on a mile or so to Clapham Junction,' said he, 'you'll
just be in time for the last to Victoria.'

"So that was the end of my adventure, Mr. Holmes. I do not know where I
was, nor whom I spoke with, nor anything save what I have told you. But
I know that there is foul play going on, and I want to help that unhappy
man if I can. I told the whole story to Mr. Mycroft Holmes next morning,
and subsequently to the police."

We all sat in silence for some little time after listening to this
extraordinary narrative. Then Sherlock looked across at his brother.

"Any steps?" he asked.

Mycroft picked up the Daily News, which was lying on the side-table.

"'Anybody supplying any information to the whereabouts of a Greek
gentleman named Paul Kratides, from Athens, who is unable to speak
English, will be rewarded. A similar reward paid to any one giving
information about a Greek lady whose first name is Sophy. X 2473.' That
was in all the dailies. No answer."

"How about the Greek Legation?"

"I have inquired. They know nothing."

"A wire to the head of the Athens police, then?"

"Sherlock has all the energy of the family," said Mycroft, turning to
me. "Well, you take the case up by all means, and let me know if you do
any good."

"Certainly," answered my friend, rising from his chair. "I'll let you
know, and Mr. Melas also. In the meantime, Mr. Melas, I should certainly
be on my guard, if I were you, for of course they must know through
these advertisements that you have betrayed them."

As we walked home together, Holmes stopped at a telegraph office and
sent off several wires.

"You see, Watson," he remarked, "our evening has been by no means
wasted. Some of my most interesting cases have come to me in this way
through Mycroft. The problem which we have just listened to, although
it can admit of but one explanation, has still some distinguishing
features."

"You have hopes of solving it?"

"Well, knowing as much as we do, it will be singular indeed if we fail
to discover the rest. You must yourself have formed some theory which
will explain the facts to which we have listened."

"In a vague way, yes."

"What was your idea, then?"

"It seemed to me to be obvious that this Greek girl had been carried off
by the young Englishman named Harold Latimer."

"Carried off from where?"

"Athens, perhaps."

Sherlock Holmes shook his head. "This young man could not talk a word of
Greek. The lady could talk English fairly well. Inference--that she had
been in England some little time, but he had not been in Greece."

"Well, then, we will presume that she had come on a visit to England,
and that this Harold had persuaded her to fly with him."

"That is more probable."

"Then the brother--for that, I fancy, must be the relationship--comes
over from Greece to interfere. He imprudently puts himself into the
power of the young man and his older associate. They seize him and use
violence towards him in order to make him sign some papers to make over
the girl's fortune--of which he may be trustee--to them. This he refuses
to do. In order to negotiate with him they have to get an interpreter,
and they pitch upon this Mr. Melas, having used some other one before.
The girl is not told of the arrival of her brother, and finds it out by
the merest accident."

"Excellent, Watson!" cried Holmes. "I really fancy that you are not far
from the truth. You see that we hold all the cards, and we have only to
fear some sudden act of violence on their part. If they give us time we
must have them."

"But how can we find where this house lies?"

"Well, if our conjecture is correct and the girl's name is or was Sophy
Kratides, we should have no difficulty in tracing her. That must be our
main hope, for the brother is, of course, a complete stranger. It is
clear that some time has elapsed since this Harold established these
relations with the girl--some weeks, at any rate--since the brother in
Greece has had time to hear of it and come across. If they have been
living in the same place during this time, it is probable that we shall
have some answer to Mycroft's advertisement."

We had reached our house in Baker Street while we had been talking.
Holmes ascended the stair first, and as he opened the door of our room
he gave a start of surprise. Looking over his shoulder, I was equally
astonished. His brother Mycroft was sitting smoking in the arm-chair.

"Come in, Sherlock! Come in, sir," said he blandly, smiling at our
surprised faces. "You don't expect such energy from me, do you,
Sherlock? But somehow this case attracts me."

"How did you get here?"

"I passed you in a hansom."

"There has been some new development?"

"I had an answer to my advertisement."

"Ah!"

"Yes, it came within a few minutes of your leaving."

"And to what effect?"

Mycroft Holmes took out a sheet of paper.

"Here it is," said he, "written with a J pen on royal cream paper by a
middle-aged man with a weak constitution. 'Sir,' he says, 'in answer to
your advertisement of to-day's date, I beg to inform you that I know the
young lady in question very well. If you should care to call upon me I
could give you some particulars as to her painful history. She is living
at present at The Myrtles, Beckenham. Yours faithfully, J. Davenport.'

"He writes from Lower Brixton," said Mycroft Holmes. "Do you not think
that we might drive to him now, Sherlock, and learn these particulars?"

"My dear Mycroft, the brother's life is more valuable than the sister's
story. I think we should call at Scotland Yard for Inspector Gregson,
and go straight out to Beckenham. We know that a man is being done to
death, and every hour may be vital."

"Better pick up Mr. Melas on our way," I suggested. "We may need an
interpreter."

"Excellent," said Sherlock Holmes. "Send the boy for a four-wheeler, and
we shall be off at once." He opened the table-drawer as he spoke, and I
noticed that he slipped his revolver into his pocket. "Yes," said he, in
answer to my glance; "I should say from what we have heard, that we are
dealing with a particularly dangerous gang."

It was almost dark before we found ourselves in Pall Mall, at the rooms
of Mr. Melas. A gentleman had just called for him, and he was gone.

"Can you tell me where?" asked Mycroft Holmes.

"I don't know, sir," answered the woman who had opened the door; "I only
know that he drove away with the gentleman in a carriage."

"Did the gentleman give a name?"

"No, sir."

"He wasn't a tall, handsome, dark young man?"

"Oh, no, sir. He was a little gentleman, with glasses, thin in the face,
but very pleasant in his ways, for he was laughing all the time that he
was talking."

"Come along!" cried Sherlock Holmes, abruptly. "This grows serious,"
he observed, as we drove to Scotland Yard. "These men have got hold of
Melas again. He is a man of no physical courage, as they are well
aware from their experience the other night. This villain was able to
terrorize him the instant that he got into his presence. No doubt
they want his professional services, but, having used him, they may be
inclined to punish him for what they will regard as his treachery."

Our hope was that, by taking train, we might get to Beckenham as soon
or sooner than the carriage. On reaching Scotland Yard, however, it was
more than an hour before we could get Inspector Gregson and comply with
the legal formalities which would enable us to enter the house. It was a
quarter to ten before we reached London Bridge, and half past before the
four of us alighted on the Beckenham platform. A drive of half a mile
brought us to The Myrtles--a large, dark house standing back from the
road in its own grounds. Here we dismissed our cab, and made our way up
the drive together.

"The windows are all dark," remarked the inspector. "The house seems
deserted."

"Our birds are flown and the nest empty," said Holmes.

"Why do you say so?"

"A carriage heavily loaded with luggage has passed out during the last
hour."

The inspector laughed. "I saw the wheel-tracks in the light of the
gate-lamp, but where does the luggage come in?"

"You may have observed the same wheel-tracks going the other way. But
the outward-bound ones were very much deeper--so much so that we can
say for a certainty that there was a very considerable weight on the
carriage."

"You get a trifle beyond me there," said the inspector, shrugging his
shoulder. "It will not be an easy door to force, but we will try if we
cannot make some one hear us."

He hammered loudly at the knocker and pulled at the bell, but without
any success. Holmes had slipped away, but he came back in a few minutes.

"I have a window open," said he.

"It is a mercy that you are on the side of the force, and not against
it, Mr. Holmes," remarked the inspector, as he noted the clever way in
which my friend had forced back the catch. "Well, I think that under the
circumstances we may enter without an invitation."

One after the other we made our way into a large apartment, which was
evidently that in which Mr. Melas had found himself. The inspector
had lit his lantern, and by its light we could see the two doors, the
curtain, the lamp, and the suit of Japanese mail as he had described
them. On the table lay two glasses, and empty brandy-bottle, and the
remains of a meal.

"What is that?" asked Holmes, suddenly.

We all stood still and listened. A low moaning sound was coming from
somewhere over our heads. Holmes rushed to the door and out into the
hall. The dismal noise came from upstairs. He dashed up, the inspector
and I at his heels, while his brother Mycroft followed as quickly as his
great bulk would permit.

Three doors faced up upon the second floor, and it was from the central
of these that the sinister sounds were issuing, sinking sometimes into a
dull mumble and rising again into a shrill whine. It was locked, but the
key had been left on the outside. Holmes flung open the door and rushed
in, but he was out again in an instant, with his hand to his throat.

"It's charcoal," he cried. "Give it time. It will clear."

Peering in, we could see that the only light in the room came from a
dull blue flame which flickered from a small brass tripod in the centre.
It threw a livid, unnatural circle upon the floor, while in the shadows
beyond we saw the vague loom of two figures which crouched against the
wall. From the open door there reeked a horrible poisonous exhalation
which set us gasping and coughing. Holmes rushed to the top of the
stairs to draw in the fresh air, and then, dashing into the room, he
threw up the window and hurled the brazen tripod out into the garden.

"We can enter in a minute," he gasped, darting out again. "Where is a
candle? I doubt if we could strike a match in that atmosphere. Hold the
light at the door and we shall get them out, Mycroft, now!"

With a rush we got to the poisoned men and dragged them out into the
well-lit hall. Both of them were blue-lipped and insensible, with
swollen, congested faces and protruding eyes. Indeed, so distorted were
their features that, save for his black beard and stout figure, we might
have failed to recognize in one of them the Greek interpreter who had
parted from us only a few hours before at the Diogenes Club. His hands
and feet were securely strapped together, and he bore over one eye
the marks of a violent blow. The other, who was secured in a similar
fashion, was a tall man in the last stage of emaciation, with several
strips of sticking-plaster arranged in a grotesque pattern over his
face. He had ceased to moan as we laid him down, and a glance showed
me that for him at least our aid had come too late. Mr. Melas, however,
still lived, and in less than an hour, with the aid of ammonia and
brandy I had the satisfaction of seeing him open his eyes, and of
knowing that my hand had drawn him back from that dark valley in which
all paths meet.

It was a simple story which he had to tell, and one which did but
confirm our own deductions. His visitor, on entering his rooms, had
drawn a life-preserver from his sleeve, and had so impressed him with
the fear of instant and inevitable death that he had kidnapped him for
the second time. Indeed, it was almost mesmeric, the effect which this
giggling ruffian had produced upon the unfortunate linguist, for he
could not speak of him save with trembling hands and a blanched cheek.
He had been taken swiftly to Beckenham, and had acted as interpreter in
a second interview, even more dramatic than the first, in which the two
Englishmen had menaced their prisoner with instant death if he did not
comply with their demands. Finally, finding him proof against every
threat, they had hurled him back into his prison, and after
reproaching Melas with his treachery, which appeared from the newspaper
advertisement, they had stunned him with a blow from a stick, and he
remembered nothing more until he found us bending over him.

And this was the singular case of the Grecian Interpreter, the
explanation of which is still involved in some mystery. We were able
to find out, by communicating with the gentleman who had answered the
advertisement, that the unfortunate young lady came of a wealthy Grecian
family, and that she had been on a visit to some friends in England.
While there she had met a young man named Harold Latimer, who had
acquired an ascendancy over he and had eventually persuaded her to fly
with him. Her friends, shocked at the event, had contented themselves
with informing her brother at Athens, and had then washed their hands
of the matter. The brother, on his arrival in England, had imprudently
placed himself in the power of Latimer and of his associate, whose name
was Wilson Kemp--a man of the foulest antecedents. These two, finding
that through his ignorance of the language he was helpless in their
hands, had kept him a prisoner, and had endeavored by cruelty and
starvation to make him sign away his own and his sister's property. They
had kept him in the house without the girl's knowledge, and the plaster
over the face had been for the purpose of making recognition difficult
in case she should ever catch a glimpse of him. Her feminine perception,
however, had instantly seen through the disguise when, on the occasion
of the interpreter's visit, she had seen him for the first time. The
poor girl, however, was herself a prisoner, for there was no one about
the house except the man who acted as coachman, and his wife, both of
whom were tools of the conspirators. Finding that their secret was out,
and that their prisoner was not to be coerced, the two villains with the
girl had fled away at a few hours' notice from the furnished house which
they had hired, having first, as they thought, taken vengeance both upon
the man who had defied and the one who had betrayed them.

Months afterwards a curious newspaper cutting reached us from
Buda-Pesth. It told how two Englishmen who had been traveling with a
woman had met with a tragic end. They had each been stabbed, it seems,
and the Hungarian police were of opinion that they had quarreled and had
inflicted mortal injuries upon each other. Holmes, however, is, I fancy,
of a different way of thinking, and holds to this day that, if one could
find the Grecian girl, one might learn how the wrongs of herself and her
brother came to be avenged.




Adventure X. The Naval Treaty


The July which immediately succeeded my marriage was made memorable
by three cases of interest, in which I had the privilege of being
associated with Sherlock Holmes and of studying his methods. I find them
recorded in my notes under the headings of "The Adventure of the Second
Stain," "The Adventure of the Naval Treaty," and "The Adventure of the
Tired Captain." The first of these, however, deals with interest of such
importance and implicates so many of the first families in the kingdom
that for many years it will be impossible to make it public. No case,
however, in which Holmes was engaged has ever illustrated the value
of his analytical methods so clearly or has impressed those who were
associated with him so deeply. I still retain an almost verbatim report
of the interview in which he demonstrated the true facts of the case
to Monsieur Dubugue of the Paris police, and Fritz von Waldbaum, the
well-known specialist of Dantzig, both of whom had wasted their energies
upon what proved to be side-issues. The new century will have come,
however, before the story can be safely told. Meanwhile I pass on to
the second on my list, which promised also at one time to be of national
importance, and was marked by several incidents which give it a quite
unique character.

During my school-days I had been intimately associated with a lad named
Percy Phelps, who was of much the same age as myself, though he was two
classes ahead of me. He was a very brilliant boy, and carried away every
prize which the school had to offer, finished his exploits by winning
a scholarship which sent him on to continue his triumphant career at
Cambridge. He was, I remember, extremely well connected, and even when
we were all little boys together we knew that his mother's brother
was Lord Holdhurst, the great conservative politician. This gaudy
relationship did him little good at school. On the contrary, it seemed
rather a piquant thing to us to chevy him about the playground and hit
him over the shins with a wicket. But it was another thing when he
came out into the world. I heard vaguely that his abilities and the
influences which he commanded had won him a good position at the Foreign
Office, and then he passed completely out of my mind until the following
letter recalled his existence:


Briarbrae, Woking. My dear Watson,--I have no doubt that you can
remember "Tadpole" Phelps, who was in the fifth form when you were in
the third. It is possible even that you may have heard that through my
uncle's influence I obtained a good appointment at the Foreign Office,
and that I was in a situation of trust and honor until a horrible
misfortune came suddenly to blast my career.

There is no use writing of the details of that dreadful event. In the
event of your acceding to my request it is probably that I shall have
to narrate them to you. I have only just recovered from nine weeks of
brain-fever, and am still exceedingly weak. Do you think that you could
bring your friend Mr. Holmes down to see me? I should like to have his
opinion of the case, though the authorities assure me that nothing more
can be done. Do try to bring him down, and as soon as possible. Every
minute seems an hour while I live in this state of horrible suspense.
Assure him that if I have not asked his advice sooner it was not because
I did not appreciate his talents, but because I have been off my head
ever since the blow fell. Now I am clear again, though I dare not think
of it too much for fear of a relapse. I am still so weak that I have to
write, as you see, by dictating. Do try to bring him.

Your old school-fellow,

Percy Phelps.


There was something that touched me as I read this letter, something
pitiable in the reiterated appeals to bring Holmes. So moved was I
that even had it been a difficult matter I should have tried it, but
of course I knew well that Holmes loved his art, so that he was ever
as ready to bring his aid as his client could be to receive it. My wife
agreed with me that not a moment should be lost in laying the matter
before him, and so within an hour of breakfast-time I found myself back
once more in the old rooms in Baker Street.

Holmes was seated at his side-table clad in his dressing-gown, and
working hard over a chemical investigation. A large curved retort
was boiling furiously in the bluish flame of a Bunsen burner, and the
distilled drops were condensing into a two-litre measure. My friend
hardly glanced up as I entered, and I, seeing that his investigation
must be of importance, seated myself in an arm-chair and waited. He
dipped into this bottle or that, drawing out a few drops of each with
his glass pipette, and finally brought a test-tube containing a solution
over to the table. In his right hand he held a slip of litmus-paper.

"You come at a crisis, Watson," said he. "If this paper remains blue,
all is well. If it turns red, it means a man's life." He dipped it into
the test-tube and it flushed at once into a dull, dirty crimson. "Hum!
I thought as much!" he cried. "I will be at your service in an instant,
Watson. You will find tobacco in the Persian slipper." He turned to his
desk and scribbled off several telegrams, which were handed over to the
page-boy. Then he threw himself down into the chair opposite, and drew
up his knees until his fingers clasped round his long, thin shins.

"A very commonplace little murder," said he. "You've got something
better, I fancy. You are the stormy petrel of crime, Watson. What is
it?"

I handed him the letter, which he read with the most concentrated
attention.

"It does not tell us very much, does it?" he remarked, as he handed it
back to me.

"Hardly anything."

"And yet the writing is of interest."

"But the writing is not his own."

"Precisely. It is a woman's."

"A man's surely," I cried.

"No, a woman's, and a woman of rare character. You see, at the
commencement of an investigation it is something to know that your
client is in close contact with some one who, for good or evil, has an
exceptional nature. My interest is already awakened in the case. If you
are ready we will start at once for Woking, and see this diplomatist who
is in such evil case, and the lady to whom he dictates his letters."

We were fortunate enough to catch an early train at Waterloo, and in
a little under an hour we found ourselves among the fir-woods and
the heather of Woking. Briarbrae proved to be a large detached house
standing in extensive grounds within a few minutes' walk of the station.
On sending in our cards we were shown into an elegantly appointed
drawing-room, where we were joined in a few minutes by a rather stout
man who received us with much hospitality. His age may have been nearer
forty than thirty, but his cheeks were so ruddy and his eyes so merry
that he still conveyed the impression of a plump and mischievous boy.

"I am so glad that you have come," said he, shaking our hands with
effusion. "Percy has been inquiring for you all morning. Ah, poor old
chap, he clings to any straw! His father and his mother asked me to see
you, for the mere mention of the subject is very painful to them."

"We have had no details yet," observed Holmes. "I perceive that you are
not yourself a member of the family."

Our acquaintance looked surprised, and then, glancing down, he began to
laugh.

"Of course you saw the J H monogram on my locket," said he. "For a
moment I thought you had done something clever. Joseph Harrison is my
name, and as Percy is to marry my sister Annie I shall at least be a
relation by marriage. You will find my sister in his room, for she has
nursed him hand-and-foot this two months back. Perhaps we'd better go in
at once, for I know how impatient he is."

The chamber in which we were shown was on the same floor as the
drawing-room. It was furnished partly as a sitting and partly as a
bedroom, with flowers arranged daintily in every nook and corner. A
young man, very pale and worn, was lying upon a sofa near the open
window, through which came the rich scent of the garden and the balmy
summer air. A woman was sitting beside him, who rose as we entered.

"Shall I leave, Percy?" she asked.

He clutched her hand to detain her. "How are you, Watson?" said he,
cordially. "I should never have known you under that moustache, and I
dare say you would not be prepared to swear to me. This I presume is
your celebrated friend, Mr. Sherlock Holmes?"

I introduced him in a few words, and we both sat down. The stout young
man had left us, but his sister still remained with her hand in that of
the invalid. She was a striking-looking woman, a little short and
thick for symmetry, but with a beautiful olive complexion, large, dark,
Italian eyes, and a wealth of deep black hair. Her rich tints made the
white face of her companion the more worn and haggard by the contrast.

"I won't waste your time," said he, raising himself upon the sofa.
"I'll plunge into the matter without further preamble. I was a happy
and successful man, Mr. Holmes, and on the eve of being married, when a
sudden and dreadful misfortune wrecked all my prospects in life.

"I was, as Watson may have told you, in the Foreign Office, and
through the influences of my uncle, Lord Holdhurst, I rose rapidly to
a responsible position. When my uncle became foreign minister in this
administration he gave me several missions of trust, and as I always
brought them to a successful conclusion, he came at last to have the
utmost confidence in my ability and tact.

"Nearly ten weeks ago--to be more accurate, on the 23d of May--he called
me into his private room, and, after complimenting me on the good work
which I had done, he informed me that he had a new commission of trust
for me to execute.

"'This,' said he, taking a gray roll of paper from his bureau, 'is the
original of that secret treaty between England and Italy of which, I
regret to say, some rumors have already got into the public press. It is
of enormous importance that nothing further should leak out. The French
or the Russian embassy would pay an immense sum to learn the contents
of these papers. They should not leave my bureau were it not that it
is absolutely necessary to have them copied. You have a desk in your
office?"

"'Yes, sir.'

"'Then take the treaty and lock it up there. I shall give directions
that you may remain behind when the others go, so that you may copy
it at your leisure without fear of being overlooked. When you have
finished, relock both the original and the draft in the desk, and hand
them over to me personally to-morrow morning.'

"I took the papers and--"

"Excuse me an instant," said Holmes. "Were you alone during this
conversation?"

"Absolutely."

"In a large room?"

"Thirty feet each way."

"In the centre?"

"Yes, about it."

"And speaking low?"

"My uncle's voice is always remarkably low. I hardly spoke at all."

"Thank you," said Holmes, shutting his eyes; "pray go on."

"I did exactly what he indicated, and waited until the other clerks had
departed. One of them in my room, Charles Gorot, had some arrears
of work to make up, so I left him there and went out to dine. When I
returned he was gone. I was anxious to hurry my work, for I knew that
Joseph--the Mr. Harrison whom you saw just now--was in town, and that he
would travel down to Woking by the eleven-o'clock train, and I wanted if
possible to catch it.

"When I came to examine the treaty I saw at once that it was of such
importance that my uncle had been guilty of no exaggeration in what
he had said. Without going into details, I may say that it defined the
position of Great Britain towards the Triple Alliance, and fore-shadowed
the policy which this country would pursue in the event of the
French fleet gaining a complete ascendancy over that of Italy in the
Mediterranean. The questions treated in it were purely naval. At the end
were the signatures of the high dignitaries who had signed it. I glanced
my eyes over it, and then settled down to my task of copying.

"It was a long document, written in the French language, and containing
twenty-six separate articles. I copied as quickly as I could, but at
nine o'clock I had only done nine articles, and it seemed hopeless for
me to attempt to catch my train. I was feeling drowsy and stupid, partly
from my dinner and also from the effects of a long day's work. A cup of
coffee would clear my brain. A commissionnaire remains all night in a
little lodge at the foot of the stairs, and is in the habit of making
coffee at his spirit-lamp for any of the officials who may be working
over time. I rang the bell, therefore, to summon him.

"To my surprise, it was a woman who answered the summons, a large,
coarse-faced, elderly woman, in an apron. She explained that she was the
commissionnaire's wife, who did the charing, and I gave her the order
for the coffee.

"I wrote two more articles and then, feeling more drowsy than ever, I
rose and walked up and down the room to stretch my legs. My coffee had
not yet come, and I wondered what was the cause of the delay could be.
Opening the door, I started down the corridor to find out. There was a
straight passage, dimly lighted, which led from the room in which I
had been working, and was the only exit from it. It ended in a curving
staircase, with the commissionnaire's lodge in the passage at the
bottom. Half way down this staircase is a small landing, with another
passage running into it at right angles. This second one leads by means
of a second small stair to a side door, used by servants, and also as
a short cut by clerks when coming from Charles Street. Here is a rough
chart of the place."

"Thank you. I think that I quite follow you," said Sherlock Holmes.

"It is of the utmost importance that you should notice this point.
I went down the stairs and into the hall, where I found the
commissionnaire fast asleep in his box, with the kettle boiling
furiously upon the spirit-lamp. I took off the kettle and blew out the
lamp, for the water was spurting over the floor. Then I put out my hand
and was about to shake the man, who was still sleeping soundly, when a
bell over his head rang loudly, and he woke with a start.

"'Mr. Phelps, sir!' said he, looking at me in bewilderment.

"'I came down to see if my coffee was ready.'

"'I was boiling the kettle when I fell asleep, sir.' He looked at me and
then up at the still quivering bell with an ever-growing astonishment
upon his face.

"'If you was here, sir, then who rang the bell?' he asked.

"'The bell!' I cried. 'What bell is it?'

"'It's the bell of the room you were working in.'

"A cold hand seemed to close round my heart. Some one, then, was in that
room where my precious treaty lay upon the table. I ran frantically up
the stair and along the passage. There was no one in the corridors, Mr.
Holmes. There was no one in the room. All was exactly as I left it, save
only that the papers which had been committed to my care had been taken
from the desk on which they lay. The copy was there, and the original
was gone."

Holmes sat up in his chair and rubbed his hands. I could see that the
problem was entirely to his heart. "Pray, what did you do then?" he
murmured.

"I recognized in an instant that the thief must have come up the stairs
from the side door. Of course I must have met him if he had come the
other way."

"You were satisfied that he could not have been concealed in the room
all the time, or in the corridor which you have just described as dimly
lighted?"

"It is absolutely impossible. A rat could not conceal himself either in
the room or the corridor. There is no cover at all."

"Thank you. Pray proceed."

"The commissionnaire, seeing by my pale face that something was to be
feared, had followed me upstairs. Now we both rushed along the corridor
and down the steep steps which led to Charles Street. The door at the
bottom was closed, but unlocked. We flung it open and rushed out. I can
distinctly remember that as we did so there came three chimes from a
neighboring clock. It was quarter to ten."

"That is of enormous importance," said Holmes, making a note upon his
shirt-cuff.

"The night was very dark, and a thin, warm rain was falling. There was
no one in Charles Street, but a great traffic was going on, as usual, in
Whitehall, at the extremity. We rushed along the pavement, bare-headed
as we were, and at the far corner we found a policeman standing.

"'A robbery has been committed,' I gasped. 'A document of immense value
has been stolen from the Foreign Office. Has any one passed this way?'

"'I have been standing here for a quarter of an hour, sir,' said he;
'only one person has passed during that time--a woman, tall and elderly,
with a Paisley shawl.'

"'Ah, that is only my wife,' cried the commissionnaire; 'has no one else
passed?'

"'No one.'

"'Then it must be the other way that the thief took,' cried the fellow,
tugging at my sleeve.

"'But I was not satisfied, and the attempts which he made to draw me
away increased my suspicions.

"'Which way did the woman go?' I cried.

"'I don't know, sir. I noticed her pass, but I had no special reason for
watching her. She seemed to be in a hurry.'

"'How long ago was it?'

"'Oh, not very many minutes.'

"'Within the last five?'

"'Well, it could not be more than five.'

"'You're only wasting your time, sir, and every minute now is of
importance,' cried the commissionnaire; 'take my word for it that my old
woman has nothing to do with it, and come down to the other end of the
street. Well, if you won't, I will.' And with that he rushed off in the
other direction.

"But I was after him in an instant and caught him by the sleeve.

"'Where do you live?' said I.

"'16 Ivy Lane, Brixton,' he answered. 'But don't let yourself be drawn
away upon a false scent, Mr. Phelps. Come to the other end of the street
and let us see if we can hear of anything.'

"Nothing was to be lost by following his advice. With the policeman we
both hurried down, but only to find the street full of traffic, many
people coming and going, but all only too eager to get to a place of
safety upon so wet a night. There was no lounger who could tell us who
had passed.

"Then we returned to the office, and searched the stairs and the passage
without result. The corridor which led to the room was laid down with
a kind of creamy linoleum which shows an impression very easily. We
examined it very carefully, but found no outline of any footmark."

"Had it been raining all evening?"

"Since about seven."

"How is it, then, that the woman who came into the room about nine left
no traces with her muddy boots?"

"I am glad you raised the point. It occurred to me at the time.
The charwomen are in the habit of taking off their boots at the
commissionnaire's office, and putting on list slippers."

"That is very clear. There were no marks, then, though the night was a
wet one? The chain of events is certainly one of extraordinary interest.
What did you do next?

"We examined the room also. There is no possibility of a secret door,
and the windows are quite thirty feet from the ground. Both of them
were fastened on the inside. The carpet prevents any possibility of a
trap-door, and the ceiling is of the ordinary whitewashed kind. I will
pledge my life that whoever stole my papers could only have come through
the door."

"How about the fireplace?"

"They use none. There is a stove. The bell-rope hangs from the wire just
to the right of my desk. Whoever rang it must have come right up to the
desk to do it. But why should any criminal wish to ring the bell? It is
a most insoluble mystery."

"Certainly the incident was unusual. What were your next steps? You
examined the room, I presume, to see if the intruder had left any
traces--any cigar-end or dropped glove or hairpin or other trifle?"

"There was nothing of the sort."

"No smell?"

"Well, we never thought of that."

"Ah, a scent of tobacco would have been worth a great deal to us in such
an investigation."

"I never smoke myself, so I think I should have observed it if there had
been any smell of tobacco. There was absolutely no clue of any kind. The
only tangible fact was that the commissionnaire's wife--Mrs. Tangey was
the name--had hurried out of the place. He could give no explanation
save that it was about the time when the woman always went home. The
policeman and I agreed that our best plan would be to seize the woman
before she could get rid of the papers, presuming that she had them.

"The alarm had reached Scotland Yard by this time, and Mr. Forbes, the
detective, came round at once and took up the case with a great deal of
energy. We hired a hansom, and in half an hour we were at the address
which had been given to us. A young woman opened the door, who proved to
be Mrs. Tangey's eldest daughter. Her mother had not come back yet, and
we were shown into the front room to wait.

"About ten minutes later a knock came at the door, and here we made the
one serious mistake for which I blame myself. Instead of opening the
door ourselves, we allowed the girl to do so. We heard her say, 'Mother,
there are two men in the house waiting to see you,' and an instant
afterwards we heard the patter of feet rushing down the passage. Forbes
flung open the door, and we both ran into the back room or kitchen, but
the woman had got there before us. She stared at us with defiant
eyes, and then, suddenly recognizing me, an expression of absolute
astonishment came over her face.

"'Why, if it isn't Mr. Phelps, of the office!' she cried.

"'Come, come, who did you think we were when you ran away from us?'
asked my companion.

"'I thought you were the brokers,' said she, 'we have had some trouble
with a tradesman.'

"'That's not quite good enough,' answered Forbes. 'We have reason to
believe that you have taken a paper of importance from the Foreign
Office, and that you ran in here to dispose of it. You must come back
with us to Scotland Yard to be searched.'

"It was in vain that she protested and resisted. A four-wheeler was
brought, and we all three drove back in it. We had first made an
examination of the kitchen, and especially of the kitchen fire, to see
whether she might have made away with the papers during the instant that
she was alone. There were no signs, however, of any ashes or scraps.
When we reached Scotland Yard she was handed over at once to the female
searcher. I waited in an agony of suspense until she came back with her
report. There were no signs of the papers.

"Then for the first time the horror of my situation came in its full
force. Hitherto I had been acting, and action had numbed thought. I had
been so confident of regaining the treaty at once that I had not dared
to think of what would be the consequence if I failed to do so. But
now there was nothing more to be done, and I had leisure to realize
my position. It was horrible. Watson there would tell you that I was a
nervous, sensitive boy at school. It is my nature. I thought of my uncle
and of his colleagues in the Cabinet, of the shame which I had brought
upon him, upon myself, upon every one connected with me. What though I
was the victim of an extraordinary accident? No allowance is made
for accidents where diplomatic interests are at stake. I was ruined,
shamefully, hopelessly ruined. I don't know what I did. I fancy I must
have made a scene. I have a dim recollection of a group of officials who
crowded round me, endeavoring to soothe me. One of them drove down with
me to Waterloo, and saw me into the Woking train. I believe that he
would have come all the way had it not been that Dr. Ferrier, who lives
near me, was going down by that very train. The doctor most kindly took
charge of me, and it was well he did so, for I had a fit in the station,
and before we reached home I was practically a raving maniac.

"You can imagine the state of things here when they were roused from
their beds by the doctor's ringing and found me in this condition. Poor
Annie here and my mother were broken-hearted. Dr. Ferrier had just heard
enough from the detective at the station to be able to give an idea of
what had happened, and his story did not mend matters. It was evident to
all that I was in for a long illness, so Joseph was bundled out of this
cheery bedroom, and it was turned into a sick-room for me. Here I have
lain, Mr. Holmes, for over nine weeks, unconscious, and raving with
brain-fever. If it had not been for Miss Harrison here and for the
doctor's care I should not be speaking to you now. She has nursed me by
day and a hired nurse has looked after me by night, for in my mad fits
I was capable of anything. Slowly my reason has cleared, but it is only
during the last three days that my memory has quite returned. Sometimes
I wish that it never had. The first thing that I did was to wire to
Mr. Forbes, who had the case in hand. He came out, and assures me that,
though everything has been done, no trace of a clue has been discovered.
The commissionnaire and his wife have been examined in every way without
any light being thrown upon the matter. The suspicions of the police
then rested upon young Gorot, who, as you may remember, stayed over time
in the office that night. His remaining behind and his French name were
really the only two points which could suggest suspicion; but, as a
matter of fact, I did not begin work until he had gone, and his people
are of Huguenot extraction, but as English in sympathy and tradition as
you and I are. Nothing was found to implicate him in any way, and there
the matter dropped. I turn to you, Mr. Holmes, as absolutely my last
hope. If you fail me, then my honor as well as my position are forever
forfeited."

The invalid sank back upon his cushions, tired out by this long recital,
while his nurse poured him out a glass of some stimulating medicine.
Holmes sat silently, with his head thrown back and his eyes closed, in
an attitude which might seem listless to a stranger, but which I knew
betokened the most intense self-absorption.

"You statement has been so explicit," said he at last, "that you have
really left me very few questions to ask. There is one of the very
utmost importance, however. Did you tell any one that you had this
special task to perform?"

"No one."

"Not Miss Harrison here, for example?"

"No. I had not been back to Woking between getting the order and
executing the commission."

"And none of your people had by chance been to see you?"

"None."

"Did any of them know their way about in the office?"

"Oh, yes, all of them had been shown over it."

"Still, of course, if you said nothing to any one about the treaty these
inquiries are irrelevant."

"I said nothing."

"Do you know anything of the commissionnaire?"

"Nothing except that he is an old soldier."

"What regiment?"

"Oh, I have heard--Coldstream Guards."

"Thank you. I have no doubt I can get details from Forbes. The
authorities are excellent at amassing facts, though they do not always
use them to advantage. What a lovely thing a rose is!"

He walked past the couch to the open window, and held up the drooping
stalk of a moss-rose, looking down at the dainty blend of crimson and
green. It was a new phase of his character to me, for I had never before
seen him show any keen interest in natural objects.

"There is nothing in which deduction is so necessary as in religion,"
said he, leaning with his back against the shutters. "It can be built
up as an exact science by the reasoner. Our highest assurance of the
goodness of Providence seems to me to rest in the flowers. All other
things, our powers our desires, our food, are all really necessary for
our existence in the first instance. But this rose is an extra. Its
smell and its color are an embellishment of life, not a condition of it.
It is only goodness which gives extras, and so I say again that we have
much to hope from the flowers."

Percy Phelps and his nurse looked at Holmes during this demonstration
with surprise and a good deal of disappointment written upon their
faces. He had fallen into a reverie, with the moss-rose between his
fingers. It had lasted some minutes before the young lady broke in upon
it.

"Do you see any prospect of solving this mystery, Mr. Holmes?" she
asked, with a touch of asperity in her voice.

"Oh, the mystery!" he answered, coming back with a start to the
realities of life. "Well, it would be absurd to deny that the case is
a very abstruse and complicated one, but I can promise you that I will
look into the matter and let you know any points which may strike me."

"Do you see any clue?"

"You have furnished me with seven, but, of course, I must test them
before I can pronounce upon their value."

"You suspect some one?"

"I suspect myself."

"What!"

"Of coming to conclusions too rapidly."

"Then go to London and test your conclusions."

"Your advice is very excellent, Miss Harrison," said Holmes, rising. "I
think, Watson, we cannot do better. Do not allow yourself to indulge in
false hopes, Mr. Phelps. The affair is a very tangled one."

"I shall be in a fever until I see you again," cried the diplomatist.

"Well, I'll come out by the same train to-morrow, though it's more than
likely that my report will be a negative one."

"God bless you for promising to come," cried our client. "It gives me
fresh life to know that something is being done. By the way, I have had
a letter from Lord Holdhurst."

"Ha! What did he say?"

"He was cold, but not harsh. I dare say my severe illness prevented
him from being that. He repeated that the matter was of the utmost
importance, and added that no steps would be taken about my future--by
which he means, of course, my dismissal--until my health was restored
and I had an opportunity of repairing my misfortune."

"Well, that was reasonable and considerate," said Holmes. "Come, Watson,
for we have a good day's work before us in town."

Mr. Joseph Harrison drove us down to the station, and we were soon
whirling up in a Portsmouth train. Holmes was sunk in profound thought,
and hardly opened his mouth until we had passed Clapham Junction.

"It's a very cheery thing to come into London by any of these lines
which run high, and allow you to look down upon the houses like this."

I thought he was joking, for the view was sordid enough, but he soon
explained himself.

"Look at those big, isolated clumps of building rising up above the
slates, like brick islands in a lead-colored sea."

"The board-schools."

"Light-houses, my boy! Beacons of the future! Capsules with hundreds of
bright little seeds in each, out of which will spring the wise, better
England of the future. I suppose that man Phelps does not drink?"

"I should not think so."

"Nor should I, but we are bound to take every possibility into account.
The poor devil has certainly got himself into very deep water, and it's
a question whether we shall ever be able to get him ashore. What did you
think of Miss Harrison?"

"A girl of strong character."

"Yes, but she is a good sort, or I am mistaken. She and her brother are
the only children of an iron-master somewhere up Northumberland way. He
got engaged to her when traveling last winter, and she came down to
be introduced to his people, with her brother as escort. Then came
the smash, and she stayed on to nurse her lover, while brother Joseph,
finding himself pretty snug, stayed on too. I've been making a few
independent inquiries, you see. But to-day must be a day of inquiries."

"My practice--" I began.

"Oh, if you find your own cases more interesting than mine--" said
Holmes, with some asperity.

"I was going to say that my practice could get along very well for a day
or two, since it is the slackest time in the year."

"Excellent," said he, recovering his good-humor. "Then we'll look into
this matter together. I think that we should begin by seeing Forbes.
He can probably tell us all the details we want until we know from what
side the case is to be approached."

"You said you had a clue?"

"Well, we have several, but we can only test their value by further
inquiry. The most difficult crime to track is the one which is
purposeless. Now this is not purposeless. Who is it who profits by it?
There is the French ambassador, there is the Russian, there is whoever
might sell it to either of these, and there is Lord Holdhurst."

"Lord Holdhurst!"

"Well, it is just conceivable that a statesman might find himself in
a position where he was not sorry to have such a document accidentally
destroyed."

"Not a statesman with the honorable record of Lord Holdhurst?"

"It is a possibility and we cannot afford to disregard it. We shall see
the noble lord to-day and find out if he can tell us anything. Meanwhile
I have already set inquiries on foot."

"Already?"

"Yes, I sent wires from Woking station to every evening paper in London.
This advertisement will appear in each of them."

He handed over a sheet torn from a note-book. On it was scribbled in
pencil: "L10 reward. The number of the cab which dropped a fare at or
about the door of the Foreign Office in Charles Street at quarter to ten
in the evening of May 23d. Apply 221 B, Baker Street."

"You are confident that the thief came in a cab?"

"If not, there is no harm done. But if Mr. Phelps is correct in stating
that there is no hiding-place either in the room or the corridors, then
the person must have come from outside. If he came from outside on so
wet a night, and yet left no trace of damp upon the linoleum, which
was examined within a few minutes of his passing, then it is exceeding
probable that he came in a cab. Yes, I think that we may safely deduce a
cab."

"It sounds plausible."

"That is one of the clues of which I spoke. It may lead us to something.
And then, of course, there is the bell--which is the most distinctive
feature of the case. Why should the bell ring? Was it the thief who did
it out of bravado? Or was it some one who was with the thief who did it
in order to prevent the crime? Or was it an accident? Or was it--?" He
sank back into the state of intense and silent thought from which he
had emerged; but it seemed to me, accustomed as I was to his every mood,
that some new possibility had dawned suddenly upon him.

It was twenty past three when we reached our terminus, and after a hasty
luncheon at the buffet we pushed on at once to Scotland Yard. Holmes
had already wired to Forbes, and we found him waiting to receive us--a
small, foxy man with a sharp but by no means amiable expression. He
was decidedly frigid in his manner to us, especially when he heard the
errand upon which we had come.

"I've heard of your methods before now, Mr. Holmes," said he, tartly.
"You are ready enough to use all the information that the police can lay
at your disposal, and then you try to finish the case yourself and bring
discredit on them."

"On the contrary," said Holmes, "out of my last fifty-three cases my
name has only appeared in four, and the police have had all the credit
in forty-nine. I don't blame you for not knowing this, for you are young
and inexperienced, but if you wish to get on in your new duties you will
work with me and not against me."

"I'd be very glad of a hint or two," said the detective, changing his
manner. "I've certainly had no credit from the case so far."

"What steps have you taken?"

"Tangey, the commissionnaire, has been shadowed. He left the Guards with
a good character and we can find nothing against him. His wife is a bad
lot, though. I fancy she knows more about this than appears."

"Have you shadowed her?"

"We have set one of our women on to her. Mrs. Tangey drinks, and our
woman has been with her twice when she was well on, but she could get
nothing out of her."

"I understand that they have had brokers in the house?"

"Yes, but they were paid off."

"Where did the money come from?"

"That was all right. His pension was due. They have not shown any sign
of being in funds."

"What explanation did she give of having answered the bell when Mr.
Phelps rang for the coffee?"

"She said that he husband was very tired and she wished to relieve him."

"Well, certainly that would agree with his being found a little later
asleep in his chair. There is nothing against them then but the woman's
character. Did you ask her why she hurried away that night? Her haste
attracted the attention of the police constable."

"She was later than usual and wanted to get home."

"Did you point out to her that you and Mr. Phelps, who started at least
twenty minutes after her, got home before her?"

"She explains that by the difference between a 'bus and a hansom."

"Did she make it clear why, on reaching her house, she ran into the back
kitchen?"

"Because she had the money there with which to pay off the brokers."

"She has at least an answer for everything. Did you ask her whether in
leaving she met any one or saw any one loitering about Charles Street?"

"She saw no one but the constable."

"Well, you seem to have cross-examined her pretty thoroughly. What else
have you done?"

"The clerk Gorot has been shadowed all these nine weeks, but without
result. We can show nothing against him."

"Anything else?"

"Well, we have nothing else to go upon--no evidence of any kind."

"Have you formed a theory about how that bell rang?"

"Well, I must confess that it beats me. It was a cool hand, whoever it
was, to go and give the alarm like that."

"Yes, it was queer thing to do. Many thanks to you for what you have
told me. If I can put the man into your hands you shall hear from me.
Come along, Watson."

"Where are we going to now?" I asked, as we left the office.

"We are now going to interview Lord Holdhurst, the cabinet minister and
future premier of England."

We were fortunate in finding that Lord Holdhurst was still in his
chambers in Downing Street, and on Holmes sending in his card we were
instantly shown up. The statesman received us with that old-fashioned
courtesy for which he is remarkable, and seated us on the two luxuriant
lounges on either side of the fireplace. Standing on the rug between us,
with his slight, tall figure, his sharp features, thoughtful face, and
curling hair prematurely tinged with gray, he seemed to represent that
not too common type, a nobleman who is in truth noble.

"Your name is very familiar to me, Mr. Holmes," said he, smiling. "And,
of course, I cannot pretend to be ignorant of the object of your visit.
There has only been one occurrence in these offices which could call for
your attention. In whose interest are you acting, may I ask?"

"In that of Mr. Percy Phelps," answered Holmes.

"Ah, my unfortunate nephew! You can understand that our kinship makes
it the more impossible for me to screen him in any way. I fear that the
incident must have a very prejudicial effect upon his career."

"But if the document is found?"

"Ah, that, of course, would be different."

"I had one or two questions which I wished to ask you, Lord Holdhurst."

"I shall be happy to give you any information in my power."

"Was it in this room that you gave your instructions as to the copying
of the document?"

"It was."

"Then you could hardly have been overheard?"

"It is out of the question."

"Did you ever mention to any one that it was your intention to give any
one the treaty to be copied?"

"Never."

"You are certain of that?"

"Absolutely."

"Well, since you never said so, and Mr. Phelps never said so, and nobody
else knew anything of the matter, then the thief's presence in the room
was purely accidental. He saw his chance and he took it."

The statesman smiled. "You take me out of my province there," said he.

Holmes considered for a moment. "There is another very important
point which I wish to discuss with you," said he. "You feared, as I
understand, that very grave results might follow from the details of
this treaty becoming known."

A shadow passed over the expressive face of the statesman. "Very grave
results indeed."

"Any have they occurred?"

"Not yet."

"If the treaty had reached, let us say, the French or Russian Foreign
Office, you would expect to hear of it?"

"I should," said Lord Holdhurst, with a wry face.

"Since nearly ten weeks have elapsed, then, and nothing has been heard,
it is not unfair to suppose that for some reason the treaty has not
reached them."

Lord Holdhurst shrugged his shoulders.

"We can hardly suppose, Mr. Holmes, that the thief took the treaty in
order to frame it and hang it up."

"Perhaps he is waiting for a better price."

"If he waits a little longer he will get no price at all. The treaty
will cease to be secret in a few months."

"That is most important," said Holmes. "Of course, it is a possible
supposition that the thief has had a sudden illness--"

"An attack of brain-fever, for example?" asked the statesman, flashing a
swift glance at him.

"I did not say so," said Holmes, imperturbably. "And now, Lord
Holdhurst, we have already taken up too much of your valuable time, and
we shall wish you good-day."

"Every success to your investigation, be the criminal who it may,"
answered the nobleman, as he bowed us out the door.

"He's a fine fellow," said Holmes, as we came out into Whitehall. "But
he has a struggle to keep up his position. He is far from rich and has
many calls. You noticed, of course, that his boots had been resoled.
Now, Watson, I won't detain you from your legitimate work any longer.
I shall do nothing more to-day, unless I have an answer to my cab
advertisement. But I should be extremely obliged to you if you would
come down with me to Woking to-morrow, by the same train which we took
yesterday."


I met him accordingly next morning and we traveled down to Woking
together. He had had no answer to his advertisement, he said, and no
fresh light had been thrown upon the case. He had, when he so willed
it, the utter immobility of countenance of a red Indian, and I could
not gather from his appearance whether he was satisfied or not with
the position of the case. His conversation, I remember, was about the
Bertillon system of measurements, and he expressed his enthusiastic
admiration of the French savant.

We found our client still under the charge of his devoted nurse, but
looking considerably better than before. He rose from the sofa and
greeted us without difficulty when we entered.

"Any news?" he asked, eagerly.

"My report, as I expected, is a negative one," said Holmes. "I have seen
Forbes, and I have seen your uncle, and I have set one or two trains of
inquiry upon foot which may lead to something."

"You have not lost heart, then?"

"By no means."

"God bless you for saying that!" cried Miss Harrison. "If we keep our
courage and our patience the truth must come out."

"We have more to tell you than you have for us," said Phelps, reseating
himself upon the couch.

"I hoped you might have something."

"Yes, we have had an adventure during the night, and one which might
have proved to be a serious one." His expression grew very grave as he
spoke, and a look of something akin to fear sprang up in his eyes. "Do
you know," said he, "that I begin to believe that I am the unconscious
centre of some monstrous conspiracy, and that my life is aimed at as
well as my honor?"

"Ah!" cried Holmes.

"It sounds incredible, for I have not, as far as I know, an enemy in
the world. Yet from last night's experience I can come to no other
conclusion."

"Pray let me hear it."

"You must know that last night was the very first night that I have ever
slept without a nurse in the room. I was so much better that I thought
I could dispense with one. I had a night-light burning, however. Well,
about two in the morning I had sunk into a light sleep when I was
suddenly aroused by a slight noise. It was like the sound which a mouse
makes when it is gnawing a plank, and I lay listening to it for some
time under the impression that it must come from that cause. Then it
grew louder, and suddenly there came from the window a sharp metallic
snick. I sat up in amazement. There could be no doubt what the sounds
were now. The first ones had been caused by some one forcing an
instrument through the slit between the sashes, and the second by the
catch being pressed back.

"There was a pause then for about ten minutes, as if the person were
waiting to see whether the noise had awakened me. Then I heard a gentle
creaking as the window was very slowly opened. I could stand it no
longer, for my nerves are not what they used to be. I sprang out of bed
and flung open the shutters. A man was crouching at the window. I could
see little of him, for he was gone like a flash. He was wrapped in some
sort of cloak which came across the lower part of his face. One thing
only I am sure of, and that is that he had some weapon in his hand. It
looked to me like a long knife. I distinctly saw the gleam of it as he
turned to run."

"This is most interesting," said Holmes. "Pray what did you do then?"

"I should have followed him through the open window if I had been
stronger. As it was, I rang the bell and roused the house. It took me
some little time, for the bell rings in the kitchen and the servants all
sleep upstairs. I shouted, however, and that brought Joseph down, and he
roused the others. Joseph and the groom found marks on the bed outside
the window, but the weather has been so dry lately that they found it
hopeless to follow the trail across the grass. There's a place, however,
on the wooden fence which skirts the road which shows signs, they tell
me, as if some one had got over, and had snapped the top of the rail in
doing so. I have said nothing to the local police yet, for I thought I
had best have your opinion first."

This tale of our client's appeared to have an extraordinary effect upon
Sherlock Holmes. He rose from his chair and paced about the room in
uncontrollable excitement.

"Misfortunes never come single," said Phelps, smiling, though it was
evident that his adventure had somewhat shaken him.

"You have certainly had your share," said Holmes. "Do you think you
could walk round the house with me?"

"Oh, yes, I should like a little sunshine. Joseph will come, too."

"And I also," said Miss Harrison.

"I am afraid not," said Holmes, shaking his head. "I think I must ask
you to remain sitting exactly where you are."

The young lady resumed her seat with an air of displeasure. Her brother,
however, had joined us and we set off all four together. We passed round
the lawn to the outside of the young diplomatist's window. There were,
as he had said, marks upon the bed, but they were hopelessly blurred and
vague. Holmes stopped over them for an instant, and then rose shrugging
his shoulders.

"I don't think any one could make much of this," said he. "Let us go
round the house and see why this particular room was chosen by the
burglar. I should have thought those larger windows of the drawing-room
and dining-room would have had more attractions for him."

"They are more visible from the road," suggested Mr. Joseph Harrison.

"Ah, yes, of course. There is a door here which he might have attempted.
What is it for?"

"It is the side entrance for trades-people. Of course it is locked at
night."

"Have you ever had an alarm like this before?"

"Never," said our client.

"Do you keep plate in the house, or anything to attract burglars?"

"Nothing of value."

Holmes strolled round the house with his hands in his pockets and a
negligent air which was unusual with him.

"By the way," said he to Joseph Harrison, "you found some place, I
understand, where the fellow scaled the fence. Let us have a look at
that!"

The plump young man led us to a spot where the top of one of the wooden
rails had been cracked. A small fragment of the wood was hanging down.
Holmes pulled it off and examined it critically.

"Do you think that was done last night? It looks rather old, does it
not?"

"Well, possibly so."

"There are no marks of any one jumping down upon the other side. No, I
fancy we shall get no help here. Let us go back to the bedroom and talk
the matter over."

Percy Phelps was walking very slowly, leaning upon the arm of his future
brother-in-law. Holmes walked swiftly across the lawn, and we were at
the open window of the bedroom long before the others came up.

"Miss Harrison," said Holmes, speaking with the utmost intensity of
manner, "you must stay where you are all day. Let nothing prevent you
from staying where you are all day. It is of the utmost importance."

"Certainly, if you wish it, Mr. Holmes," said the girl in astonishment.

"When you go to bed lock the door of this room on the outside and keep
the key. Promise to do this."

"But Percy?"

"He will come to London with us."

"And am I to remain here?"

"It is for his sake. You can serve him. Quick! Promise!"

She gave a quick nod of assent just as the other two came up.

"Why do you sit moping there, Annie?" cried her brother. "Come out into
the sunshine!"

"No, thank you, Joseph. I have a slight headache and this room is
deliciously cool and soothing."

"What do you propose now, Mr. Holmes?" asked our client.

"Well, in investigating this minor affair we must not lose sight of our
main inquiry. It would be a very great help to me if you would come up
to London with us."

"At once?"

"Well, as soon as you conveniently can. Say in an hour."

"I feel quite strong enough, if I can really be of any help."

"The greatest possible."

"Perhaps you would like me to stay there to-night?"

"I was just going to propose it."

"Then, if my friend of the night comes to revisit me, he will find the
bird flown. We are all in your hands, Mr. Holmes, and you must tell us
exactly what you would like done. Perhaps you would prefer that Joseph
came with us so as to look after me?"

"Oh, no; my friend Watson is a medical man, you know, and he'll look
after you. We'll have our lunch here, if you will permit us, and then we
shall all three set off for town together."

It was arranged as he suggested, though Miss Harrison excused herself
from leaving the bedroom, in accordance with Holmes's suggestion. What
the object of my friend's manoeuvres was I could not conceive, unless it
were to keep the lady away from Phelps, who, rejoiced by his
returning health and by the prospect of action, lunched with us in the
dining-room. Holmes had a still more startling surprise for us, however,
for, after accompanying us down to the station and seeing us into
our carriage, he calmly announced that he had no intention of leaving
Woking.

"There are one or two small points which I should desire to clear up
before I go," said he. "Your absence, Mr. Phelps, will in some ways
rather assist me. Watson, when you reach London you would oblige me by
driving at once to Baker Street with our friend here, and remaining
with him until I see you again. It is fortunate that you are old
school-fellows, as you must have much to talk over. Mr. Phelps can
have the spare bedroom to-night, and I will be with you in time for
breakfast, for there is a train which will take me into Waterloo at
eight."

"But how about our investigation in London?" asked Phelps, ruefully.

"We can do that to-morrow. I think that just at present I can be of more
immediate use here."

"You might tell them at Briarbrae that I hope to be back to-morrow
night," cried Phelps, as we began to move from the platform.

"I hardly expect to go back to Briarbrae," answered Holmes, and waved
his hand to us cheerily as we shot out from the station.

Phelps and I talked it over on our journey, but neither of us could
devise a satisfactory reason for this new development.

"I suppose he wants to find out some clue as to the burglary last night,
if a burglar it was. For myself, I don't believe it was an ordinary
thief."

"What is your own idea, then?"

"Upon my word, you may put it down to my weak nerves or not, but I
believe there is some deep political intrigue going on around me, and
that for some reason that passes my understanding my life is aimed at
by the conspirators. It sounds high-flown and absurd, but consider the
facts! Why should a thief try to break in at a bedroom window, where
there could be no hope of any plunder, and why should he come with a
long knife in his hand?"

"You are sure it was not a house-breaker's jimmy?"

"Oh, no, it was a knife. I saw the flash of the blade quite distinctly."

"But why on earth should you be pursued with such animosity?"

"Ah, that is the question."

"Well, if Holmes takes the same view, that would account for his action,
would it not? Presuming that your theory is correct, if he can lay his
hands upon the man who threatened you last night he will have gone a
long way towards finding who took the naval treaty. It is absurd to
suppose that you have two enemies, one of whom robs you, while the other
threatens your life."

"But Holmes said that he was not going to Briarbrae."

"I have known him for some time," said I, "but I never knew him do
anything yet without a very good reason," and with that our conversation
drifted off on to other topics.

But it was a weary day for me. Phelps was still weak after his long
illness, and his misfortune made him querulous and nervous. In vain
I endeavored to interest him in Afghanistan, in India, in social
questions, in anything which might take his mind out of the groove.
He would always come back to his lost treaty, wondering, guessing,
speculating, as to what Holmes was doing, what steps Lord Holdhurst was
taking, what news we should have in the morning. As the evening wore on
his excitement became quite painful.

"You have implicit faith in Holmes?" he asked.

"I have seen him do some remarkable things."

"But he never brought light into anything quite so dark as this?"

"Oh, yes; I have known him solve questions which presented fewer clues
than yours."

"But not where such large interests are at stake?"

"I don't know that. To my certain knowledge he has acted on behalf of
three of the reigning houses of Europe in very vital matters."

"But you know him well, Watson. He is such an inscrutable fellow that I
never quite know what to make of him. Do you think he is hopeful? Do you
think he expects to make a success of it?"

"He has said nothing."

"That is a bad sign."

"On the contrary, I have noticed that when he is off the trail he
generally says so. It is when he is on a scent and is not quite
absolutely sure yet that it is the right one that he is most taciturn.
Now, my dear fellow, we can't help matters by making ourselves nervous
about them, so let me implore you to go to bed and so be fresh for
whatever may await us to-morrow."

I was able at last to persuade my companion to take my advice, though I
knew from his excited manner that there was not much hope of sleep for
him. Indeed, his mood was infectious, for I lay tossing half the night
myself, brooding over this strange problem, and inventing a hundred
theories, each of which was more impossible than the last. Why had
Holmes remained at Woking? Why had he asked Miss Harrison to remain
in the sick-room all day? Why had he been so careful not to inform the
people at Briarbrae that he intended to remain near them? I cudgelled
my brains until I fell asleep in the endeavor to find some explanation
which would cover all these facts.

It was seven o'clock when I awoke, and I set off at once for Phelps's
room, to find him haggard and spent after a sleepless night. His first
question was whether Holmes had arrived yet.

"He'll be here when he promised," said I, "and not an instant sooner or
later."

And my words were true, for shortly after eight a hansom dashed up to
the door and our friend got out of it. Standing in the window we saw
that his left hand was swathed in a bandage and that his face was very
grim and pale. He entered the house, but it was some little time before
he came upstairs.

"He looks like a beaten man," cried Phelps.

I was forced to confess that he was right. "After all," said I, "the
clue of the matter lies probably here in town."

Phelps gave a groan.

"I don't know how it is," said he, "but I had hoped for so much from his
return. But surely his hand was not tied up like that yesterday. What
can be the matter?"

"You are not wounded, Holmes?" I asked, as my friend entered the room.

"Tut, it is only a scratch through my own clumsiness," he answered,
nodding his good-mornings to us. "This case of yours, Mr. Phelps, is
certainly one of the darkest which I have ever investigated."

"I feared that you would find it beyond you."

"It has been a most remarkable experience."

"That bandage tells of adventures," said I. "Won't you tell us what has
happened?"

"After breakfast, my dear Watson. Remember that I have breathed thirty
miles of Surrey air this morning. I suppose that there has been no
answer from my cabman advertisement? Well, well, we cannot expect to
score every time."

The table was all laid, and just as I was about to ring Mrs. Hudson
entered with the tea and coffee. A few minutes later she brought in
three covers, and we all drew up to the table, Holmes ravenous, I
curious, and Phelps in the gloomiest state of depression.

"Mrs. Hudson has risen to the occasion," said Holmes, uncovering a dish
of curried chicken. "Her cuisine is a little limited, but she has
as good an idea of breakfast as a Scotch-woman. What have you here,
Watson?"

"Ham and eggs," I answered.

"Good! What are you going to take, Mr. Phelps--curried fowl or eggs, or
will you help yourself?"

"Thank you. I can eat nothing," said Phelps.

"Oh, come! Try the dish before you."

"Thank you, I would really rather not."

"Well, then," said Holmes, with a mischievous twinkle, "I suppose that
you have no objection to helping me?"

Phelps raised the cover, and as he did so he uttered a scream, and sat
there staring with a face as white as the plate upon which he looked.
Across the centre of it was lying a little cylinder of blue-gray paper.
He caught it up, devoured it with his eyes, and then danced madly about
the room, pressing it to his bosom and shrieking out in his delight.
Then he fell back into an arm-chair so limp and exhausted with his own
emotions that we had to pour brandy down his throat to keep him from
fainting.

"There! there!" said Holmes, soothing, patting him upon the shoulder.
"It was too bad to spring it on you like this, but Watson here will tell
you that I never can resist a touch of the dramatic."

Phelps seized his hand and kissed it. "God bless you!" he cried. "You
have saved my honor."

"Well, my own was at stake, you know," said Holmes. "I assure you it is
just as hateful to me to fail in a case as it can be to you to blunder
over a commission."

Phelps thrust away the precious document into the innermost pocket of
his coat.

"I have not the heart to interrupt your breakfast any further, and yet I
am dying to know how you got it and where it was."

Sherlock Holmes swallowed a cup of coffee, and turned his attention to
the ham and eggs. Then he rose, lit his pipe, and settled himself down
into his chair.

"I'll tell you what I did first, and how I came to do it afterwards,"
said he. "After leaving you at the station I went for a charming walk
through some admirable Surrey scenery to a pretty little village called
Ripley, where I had my tea at an inn, and took the precaution of filling
my flask and of putting a paper of sandwiches in my pocket. There I
remained until evening, when I set off for Woking again, and found
myself in the high-road outside Briarbrae just after sunset.

"Well, I waited until the road was clear--it is never a very frequented
one at any time, I fancy--and then I clambered over the fence into the
grounds."

"Surely the gate was open!" ejaculated Phelps.

"Yes, but I have a peculiar taste in these matters. I chose the place
where the three fir-trees stand, and behind their screen I got over
without the least chance of any one in the house being able to see me.
I crouched down among the bushes on the other side, and crawled from one
to the other--witness the disreputable state of my trouser knees--until
I had reached the clump of rhododendrons just opposite to your bedroom
window. There I squatted down and awaited developments.

"The blind was not down in your room, and I could see Miss Harrison
sitting there reading by the table. It was quarter-past ten when she
closed her book, fastened the shutters, and retired.

"I heard her shut the door, and felt quite sure that she had turned the
key in the lock."

"The key!" ejaculated Phelps.

"Yes; I had given Miss Harrison instructions to lock the door on the
outside and take the key with her when she went to bed. She carried out
every one of my injunctions to the letter, and certainly without her
cooperation you would not have that paper in you coat-pocket. She
departed then and the lights went out, and I was left squatting in the
rhododendron-bush.

"The night was fine, but still it was a very weary vigil. Of course it
has the sort of excitement about it that the sportsman feels when he
lies beside the water-course and waits for the big game. It was very
long, though--almost as long, Watson, as when you and I waited in that
deadly room when we looked into the little problem of the Speckled Band.
There was a church-clock down at Woking which struck the quarters, and I
thought more than once that it had stopped. At last however about two
in the morning, I suddenly heard the gentle sound of a bolt being pushed
back and the creaking of a key. A moment later the servants' door was
opened, and Mr. Joseph Harrison stepped out into the moonlight."

"Joseph!" ejaculated Phelps.

"He was bare-headed, but he had a black coat thrown over his shoulder so
that he could conceal his face in an instant if there were any alarm. He
walked on tiptoe under the shadow of the wall, and when he reached the
window he worked a long-bladed knife through the sash and pushed back
the catch. Then he flung open the window, and putting his knife through
the crack in the shutters, he thrust the bar up and swung them open.

"From where I lay I had a perfect view of the inside of the room and of
every one of his movements. He lit the two candles which stood upon the
mantelpiece, and then he proceeded to turn back the corner of the carpet
in the neighborhood of the door. Presently he stopped and picked out a
square piece of board, such as is usually left to enable plumbers to get
at the joints of the gas-pipes. This one covered, as a matter of
fact, the T joint which gives off the pipe which supplies the kitchen
underneath. Out of this hiding-place he drew that little cylinder
of paper, pushed down the board, rearranged the carpet, blew out the
candles, and walked straight into my arms as I stood waiting for him
outside the window.

"Well, he has rather more viciousness than I gave him credit for, has
Master Joseph. He flew at me with his knife, and I had to grasp him
twice, and got a cut over the knuckles, before I had the upper hand of
him. He looked murder out of the only eye he could see with when we had
finished, but he listened to reason and gave up the papers. Having
got them I let my man go, but I wired full particulars to Forbes this
morning. If he is quick enough to catch his bird, well and good. But
if, as I shrewdly suspect, he finds the nest empty before he gets there,
why, all the better for the government. I fancy that Lord Holdhurst for
one, and Mr. Percy Phelps for another, would very much rather that the
affair never got as far as a police-court.

"My God!" gasped our client. "Do you tell me that during these long ten
weeks of agony the stolen papers were within the very room with me all
the time?"

"So it was."

"And Joseph! Joseph a villain and a thief!"

"Hum! I am afraid Joseph's character is a rather deeper and more
dangerous one than one might judge from his appearance. From what I
have heard from him this morning, I gather that he has lost heavily in
dabbling with stocks, and that he is ready to do anything on earth to
better his fortunes. Being an absolutely selfish man, when a chance
presented itself he did not allow either his sister's happiness or your
reputation to hold his hand."

Percy Phelps sank back in his chair. "My head whirls," said he. "Your
words have dazed me."

"The principal difficulty in your case," remarked Holmes, in his
didactic fashion, "lay in the fact of there being too much evidence.
What was vital was overlaid and hidden by what was irrelevant. Of all
the facts which were presented to us we had to pick just those which we
deemed to be essential, and then piece them together in their order, so
as to reconstruct this very remarkable chain of events. I had already
begun to suspect Joseph, from the fact that you had intended to travel
home with him that night, and that therefore it was a likely enough
thing that he should call for you, knowing the Foreign Office well, upon
his way. When I heard that some one had been so anxious to get into the
bedroom, in which no one but Joseph could have concealed anything--you
told us in your narrative how you had turned Joseph out when you arrived
with the doctor--my suspicions all changed to certainties, especially as
the attempt was made on the first night upon which the nurse was absent,
showing that the intruder was well acquainted with the ways of the
house."

"How blind I have been!"

"The facts of the case, as far as I have worked them out, are these:
this Joseph Harrison entered the office through the Charles Street door,
and knowing his way he walked straight into your room the instant after
you left it. Finding no one there he promptly rang the bell, and at
the instant that he did so his eyes caught the paper upon the table.
A glance showed him that chance had put in his way a State document of
immense value, and in an instant he had thrust it into his pocket and
was gone. A few minutes elapsed, as you remember, before the sleepy
commissionnaire drew your attention to the bell, and those were just
enough to give the thief time to make his escape.

"He made his way to Woking by the first train, and having examined his
booty and assured himself that it really was of immense value, he
had concealed it in what he thought was a very safe place, with the
intention of taking it out again in a day or two, and carrying it to the
French embassy, or wherever he thought that a long price was to be
had. Then came your sudden return. He, without a moment's warning, was
bundled out of his room, and from that time onward there were always at
least two of you there to prevent him from regaining his treasure. The
situation to him must have been a maddening one. But at last he thought
he saw his chance. He tried to steal in, but was baffled by your
wakefulness. You remember that you did not take your usual draught that
night."

"I remember."

"I fancy that he had taken steps to make that draught efficacious,
and that he quite relied upon your being unconscious. Of course, I
understood that he would repeat the attempt whenever it could be done
with safety. Your leaving the room gave him the chance he wanted. I kept
Miss Harrison in it all day so that he might not anticipate us. Then,
having given him the idea that the coast was clear, I kept guard as
I have described. I already knew that the papers were probably in the
room, but I had no desire to rip up all the planking and skirting in
search of them. I let him take them, therefore, from the hiding-place,
and so saved myself an infinity of trouble. Is there any other point
which I can make clear?"

"Why did he try the window on the first occasion," I asked, "when he
might have entered by the door?"

"In reaching the door he would have to pass seven bedrooms. On the other
hand, he could get out on to the lawn with ease. Anything else?"

"You do not think," asked Phelps, "that he had any murderous intention?
The knife was only meant as a tool."

"It may be so," answered Holmes, shrugging his shoulders. "I can only
say for certain that Mr. Joseph Harrison is a gentleman to whose mercy I
should be extremely unwilling to trust."




Adventure XI. The Final Problem


It is with a heavy heart that I take up my pen to write these the last
words in which I shall ever record the singular gifts by which my friend
Mr. Sherlock Holmes was distinguished. In an incoherent and, as I deeply
feel, an entirely inadequate fashion, I have endeavored to give some
account of my strange experiences in his company from the chance which
first brought us together at the period of the "Study in Scarlet," up
to the time of his interference in the matter of the "Naval Treaty"--an
interference which had the unquestionable effect of preventing a serious
international complication. It was my intention to have stopped there,
and to have said nothing of that event which has created a void in my
life which the lapse of two years has done little to fill. My hand
has been forced, however, by the recent letters in which Colonel James
Moriarty defends the memory of his brother, and I have no choice but to
lay the facts before the public exactly as they occurred. I alone know
the absolute truth of the matter, and I am satisfied that the time has
come when no good purpose is to be served by its suppression. As far as
I know, there have been only three accounts in the public press: that
in the Journal de Geneve on May 6th, 1891, the Reuter's despatch in the
English papers on May 7th, and finally the recent letter to which I have
alluded. Of these the first and second were extremely condensed, while
the last is, as I shall now show, an absolute perversion of the facts.
It lies with me to tell for the first time what really took place
between Professor Moriarty and Mr. Sherlock Holmes.

It may be remembered that after my marriage, and my subsequent start in
private practice, the very intimate relations which had existed between
Holmes and myself became to some extent modified. He still came to me
from time to time when he desired a companion in his investigation, but
these occasions grew more and more seldom, until I find that in the year
1890 there were only three cases of which I retain any record. During
the winter of that year and the early spring of 1891, I saw in the
papers that he had been engaged by the French government upon a matter
of supreme importance, and I received two notes from Holmes, dated from
Narbonne and from Nimes, from which I gathered that his stay in France
was likely to be a long one. It was with some surprise, therefore, that
I saw him walk into my consulting-room upon the evening of April 24th.
It struck me that he was looking even paler and thinner than usual.

"Yes, I have been using myself up rather too freely," he remarked, in
answer to my look rather than to my words; "I have been a little pressed
of late. Have you any objection to my closing your shutters?"

The only light in the room came from the lamp upon the table at which I
had been reading. Holmes edged his way round the wall and flinging the
shutters together, he bolted them securely.

"You are afraid of something?" I asked.

"Well, I am."

"Of what?"

"Of air-guns."

"My dear Holmes, what do you mean?"

"I think that you know me well enough, Watson, to understand that I am
by no means a nervous man. At the same time, it is stupidity rather than
courage to refuse to recognize danger when it is close upon you. Might
I trouble you for a match?" He drew in the smoke of his cigarette as if
the soothing influence was grateful to him.

"I must apologize for calling so late," said he, "and I must further beg
you to be so unconventional as to allow me to leave your house presently
by scrambling over your back garden wall."

"But what does it all mean?" I asked.

He held out his hand, and I saw in the light of the lamp that two of his
knuckles were burst and bleeding.

"It is not an airy nothing, you see," said he, smiling. "On the
contrary, it is solid enough for a man to break his hand over. Is Mrs.
Watson in?"

"She is away upon a visit."

"Indeed! You are alone?"

"Quite."

"Then it makes it the easier for me to propose that you should come away
with me for a week to the Continent."

"Where?"

"Oh, anywhere. It's all the same to me."

There was something very strange in all this. It was not Holmes's nature
to take an aimless holiday, and something about his pale, worn face told
me that his nerves were at their highest tension. He saw the question in
my eyes, and, putting his finger-tips together and his elbows upon his
knees, he explained the situation.

"You have probably never heard of Professor Moriarty?" said he.

"Never."

"Aye, there's the genius and the wonder of the thing!" he cried. "The
man pervades London, and no one has heard of him. That's what puts
him on a pinnacle in the records of crime. I tell you, Watson, in all
seriousness, that if I could beat that man, if I could free society
of him, I should feel that my own career had reached its summit, and
I should be prepared to turn to some more placid line in life. Between
ourselves, the recent cases in which I have been of assistance to the
royal family of Scandinavia, and to the French republic, have left me in
such a position that I could continue to live in the quiet fashion
which is most congenial to me, and to concentrate my attention upon my
chemical researches. But I could not rest, Watson, I could not sit quiet
in my chair, if I thought that such a man as Professor Moriarty were
walking the streets of London unchallenged."

"What has he done, then?"

"His career has been an extraordinary one. He is a man of good birth and
excellent education, endowed by nature with a phenomenal mathematical
faculty. At the age of twenty-one he wrote a treatise upon the Binomial
Theorem, which has had a European vogue. On the strength of it he won
the Mathematical Chair at one of our smaller universities, and had, to
all appearances, a most brilliant career before him. But the man had
hereditary tendencies of the most diabolical kind. A criminal strain
ran in his blood, which, instead of being modified, was increased and
rendered infinitely more dangerous by his extraordinary mental powers.
Dark rumors gathered round him in the university town, and eventually he
was compelled to resign his chair and to come down to London, where he
set up as an army coach. So much is known to the world, but what I am
telling you now is what I have myself discovered.

"As you are aware, Watson, there is no one who knows the higher criminal
world of London so well as I do. For years past I have continually been
conscious of some power behind the malefactor, some deep organizing
power which forever stands in the way of the law, and throws its shield
over the wrong-doer. Again and again in cases of the most varying
sorts--forgery cases, robberies, murders--I have felt the presence of
this force, and I have deduced its action in many of those undiscovered
crimes in which I have not been personally consulted. For years I have
endeavored to break through the veil which shrouded it, and at last
the time came when I seized my thread and followed it, until it led
me, after a thousand cunning windings, to ex-Professor Moriarty of
mathematical celebrity.

"He is the Napoleon of crime, Watson. He is the organizer of half that
is evil and of nearly all that is undetected in this great city. He is a
genius, a philosopher, an abstract thinker. He has a brain of the first
order. He sits motionless, like a spider in the center of its web, but
that web has a thousand radiations, and he knows well every quiver of
each of them. He does little himself. He only plans. But his agents are
numerous and splendidly organized. Is there a crime to be done, a
paper to be abstracted, we will say, a house to be rifled, a man to be
removed--the word is passed to the Professor, the matter is organized
and carried out. The agent may be caught. In that case money is found
for his bail or his defence. But the central power which uses the agent
is never caught--never so much as suspected. This was the organization
which I deduced, Watson, and which I devoted my whole energy to exposing
and breaking up.

"But the Professor was fenced round with safeguards so cunningly devised
that, do what I would, it seemed impossible to get evidence which would
convict in a court of law. You know my powers, my dear Watson, and yet
at the end of three months I was forced to confess that I had at last
met an antagonist who was my intellectual equal. My horror at his crimes
was lost in my admiration at his skill. But at last he made a trip--only
a little, little trip--but it was more than he could afford when I was
so close upon him. I had my chance, and, starting from that point, I
have woven my net round him until now it is all ready to close. In three
days--that is to say, on Monday next--matters will be ripe, and the
Professor, with all the principal members of his gang, will be in the
hands of the police. Then will come the greatest criminal trial of the
century, the clearing up of over forty mysteries, and the rope for all
of them; but if we move at all prematurely, you understand, they may
slip out of our hands even at the last moment.

"Now, if I could have done this without the knowledge of Professor
Moriarty, all would have been well. But he was too wily for that. He saw
every step which I took to draw my toils round him. Again and again
he strove to break away, but I as often headed him off. I tell you,
my friend, that if a detailed account of that silent contest could
be written, it would take its place as the most brilliant bit of
thrust-and-parry work in the history of detection. Never have I risen to
such a height, and never have I been so hard pressed by an opponent. He
cut deep, and yet I just undercut him. This morning the last steps were
taken, and three days only were wanted to complete the business. I was
sitting in my room thinking the matter over, when the door opened and
Professor Moriarty stood before me.

"My nerves are fairly proof, Watson, but I must confess to a start when
I saw the very man who had been so much in my thoughts standing there on
my threshhold. His appearance was quite familiar to me. He is extremely
tall and thin, his forehead domes out in a white curve, and his two
eyes are deeply sunken in his head. He is clean-shaven, pale, and
ascetic-looking, retaining something of the professor in his features.
His shoulders are rounded from much study, and his face protrudes
forward, and is forever slowly oscillating from side to side in a
curiously reptilian fashion. He peered at me with great curiosity in his
puckered eyes.

"'You have less frontal development than I should have expected,' said
he, at last. 'It is a dangerous habit to finger loaded firearms in the
pocket of one's dressing-gown.'

"The fact is that upon his entrance I had instantly recognized the
extreme personal danger in which I lay. The only conceivable escape for
him lay in silencing my tongue. In an instant I had slipped the revolver
from the drawer into my pocket, and was covering him through the cloth.
At his remark I drew the weapon out and laid it cocked upon the table.
He still smiled and blinked, but there was something about his eyes
which made me feel very glad that I had it there.

"'You evidently don't know me,' said he.

"'On the contrary,' I answered, 'I think it is fairly evident that I do.
Pray take a chair. I can spare you five minutes if you have anything to
say.'

"'All that I have to say has already crossed your mind,' said he.

"'Then possibly my answer has crossed yours,' I replied.

"'You stand fast?'

"'Absolutely.'

"He clapped his hand into his pocket, and I raised the pistol from
the table. But he merely drew out a memorandum-book in which he had
scribbled some dates.

"'You crossed my path on the 4th of January,' said he. 'On the 23d you
incommoded me; by the middle of February I was seriously inconvenienced
by you; at the end of March I was absolutely hampered in my plans; and
now, at the close of April, I find myself placed in such a position
through your continual persecution that I am in positive danger of
losing my liberty. The situation is becoming an impossible one.'

"'Have you any suggestion to make?' I asked.

"'You must drop it, Mr. Holmes,' said he, swaying his face about. 'You
really must, you know.'

"'After Monday,' said I.

"'Tut, tut,' said he. 'I am quite sure that a man of your intelligence
will see that there can be but one outcome to this affair. It is
necessary that you should withdraw. You have worked things in such a
fashion that we have only one resource left. It has been an intellectual
treat to me to see the way in which you have grappled with this affair,
and I say, unaffectedly, that it would be a grief to me to be forced
to take any extreme measure. You smile, sir, but I assure you that it
really would.'

"'Danger is part of my trade,' I remarked.

"'That is not danger,' said he. 'It is inevitable destruction. You stand
in the way not merely of an individual, but of a mighty organization,
the full extent of which you, with all your cleverness, have been unable
to realize. You must stand clear, Mr. Holmes, or be trodden under foot.'

"'I am afraid,' said I, rising, 'that in the pleasure of this
conversation I am neglecting business of importance which awaits me
elsewhere.'

"He rose also and looked at me in silence, shaking his head sadly.

"'Well, well,' said he, at last. 'It seems a pity, but I have done
what I could. I know every move of your game. You can do nothing before
Monday. It has been a duel between you and me, Mr. Holmes. You hope to
place me in the dock. I tell you that I will never stand in the dock.
You hope to beat me. I tell you that you will never beat me. If you are
clever enough to bring destruction upon me, rest assured that I shall do
as much to you.'

"'You have paid me several compliments, Mr. Moriarty,' said I. 'Let me
pay you one in return when I say that if I were assured of the former
eventuality I would, in the interests of the public, cheerfully accept
the latter.'

"'I can promise you the one, but not the other,' he snarled, and so
turned his rounded back upon me, and went peering and blinking out of
the room.

"That was my singular interview with Professor Moriarty. I confess that
it left an unpleasant effect upon my mind. His soft, precise fashion
of speech leaves a conviction of sincerity which a mere bully could
not produce. Of course, you will say: 'Why not take police precautions
against him?' the reason is that I am well convinced that it is from his
agents the blow will fall. I have the best proofs that it would be so."

"You have already been assaulted?"

"My dear Watson, Professor Moriarty is not a man who lets the grass grow
under his feet. I went out about mid-day to transact some business in
Oxford Street. As I passed the corner which leads from Bentinck Street
on to the Welbeck Street crossing a two-horse van furiously driven
whizzed round and was on me like a flash. I sprang for the foot-path
and saved myself by the fraction of a second. The van dashed round by
Marylebone Lane and was gone in an instant. I kept to the pavement after
that, Watson, but as I walked down Vere Street a brick came down from
the roof of one of the houses, and was shattered to fragments at my
feet. I called the police and had the place examined. There were slates
and bricks piled up on the roof preparatory to some repairs, and they
would have me believe that the wind had toppled over one of these. Of
course I knew better, but I could prove nothing. I took a cab after that
and reached my brother's rooms in Pall Mall, where I spent the day. Now
I have come round to you, and on my way I was attacked by a rough with a
bludgeon. I knocked him down, and the police have him in custody; but
I can tell you with the most absolute confidence that no possible
connection will ever be traced between the gentleman upon whose front
teeth I have barked my knuckles and the retiring mathematical coach, who
is, I dare say, working out problems upon a black-board ten miles away.
You will not wonder, Watson, that my first act on entering your rooms
was to close your shutters, and that I have been compelled to ask your
permission to leave the house by some less conspicuous exit than the
front door."

I had often admired my friend's courage, but never more than now, as he
sat quietly checking off a series of incidents which must have combined
to make up a day of horror.

"You will spend the night here?" I said.

"No, my friend, you might find me a dangerous guest. I have my plans
laid, and all will be well. Matters have gone so far now that they can
move without my help as far as the arrest goes, though my presence is
necessary for a conviction. It is obvious, therefore, that I cannot do
better than get away for the few days which remain before the police are
at liberty to act. It would be a great pleasure to me, therefore, if you
could come on to the Continent with me."

"The practice is quiet," said I, "and I have an accommodating neighbor.
I should be glad to come."

"And to start to-morrow morning?"

"If necessary."

"Oh yes, it is most necessary. Then these are your instructions, and I
beg, my dear Watson, that you will obey them to the letter, for you are
now playing a double-handed game with me against the cleverest rogue and
the most powerful syndicate of criminals in Europe. Now listen! You
will dispatch whatever luggage you intend to take by a trusty messenger
unaddressed to Victoria to-night. In the morning you will send for a
hansom, desiring your man to take neither the first nor the second which
may present itself. Into this hansom you will jump, and you will drive
to the Strand end of the Lowther Arcade, handing the address to the
cabman upon a slip of paper, with a request that he will not throw it
away. Have your fare ready, and the instant that your cab stops,
dash through the Arcade, timing yourself to reach the other side at a
quarter-past nine. You will find a small brougham waiting close to the
curb, driven by a fellow with a heavy black cloak tipped at the collar
with red. Into this you will step, and you will reach Victoria in time
for the Continental express."

"Where shall I meet you?"

"At the station. The second first-class carriage from the front will be
reserved for us."

"The carriage is our rendezvous, then?"

"Yes."

It was in vain that I asked Holmes to remain for the evening. It was
evident to me that he thought he might bring trouble to the roof he was
under, and that that was the motive which impelled him to go. With a few
hurried words as to our plans for the morrow he rose and came out with
me into the garden, clambering over the wall which leads into Mortimer
Street, and immediately whistling for a hansom, in which I heard him
drive away.

In the morning I obeyed Holmes's injunctions to the letter. A hansom was
procured with such precaution as would prevent its being one which was
placed ready for us, and I drove immediately after breakfast to the
Lowther Arcade, through which I hurried at the top of my speed. A
brougham was waiting with a very massive driver wrapped in a dark cloak,
who, the instant that I had stepped in, whipped up the horse and rattled
off to Victoria Station. On my alighting there he turned the carriage,
and dashed away again without so much as a look in my direction.

So far all had gone admirably. My luggage was waiting for me, and I had
no difficulty in finding the carriage which Holmes had indicated, the
less so as it was the only one in the train which was marked "Engaged."
My only source of anxiety now was the non-appearance of Holmes. The
station clock marked only seven minutes from the time when we were
due to start. In vain I searched among the groups of travellers and
leave-takers for the lithe figure of my friend. There was no sign of
him. I spent a few minutes in assisting a venerable Italian priest, who
was endeavoring to make a porter understand, in his broken English,
that his luggage was to be booked through to Paris. Then, having taken
another look round, I returned to my carriage, where I found that the
porter, in spite of the ticket, had given me my decrepit Italian friend
as a traveling companion. It was useless for me to explain to him that
his presence was an intrusion, for my Italian was even more limited than
his English, so I shrugged my shoulders resignedly, and continued to
look out anxiously for my friend. A chill of fear had come over me, as I
thought that his absence might mean that some blow had fallen during the
night. Already the doors had all been shut and the whistle blown, when--

"My dear Watson," said a voice, "you have not even condescended to say
good-morning."

I turned in uncontrollable astonishment. The aged ecclesiastic had
turned his face towards me. For an instant the wrinkles were smoothed
away, the nose drew away from the chin, the lower lip ceased to protrude
and the mouth to mumble, the dull eyes regained their fire, the drooping
figure expanded. The next the whole frame collapsed again, and Holmes
had gone as quickly as he had come.

"Good heavens!" I cried; "how you startled me!"

"Every precaution is still necessary," he whispered. "I have reason to
think that they are hot upon our trail. Ah, there is Moriarty himself."

The train had already begun to move as Holmes spoke. Glancing back, I
saw a tall man pushing his way furiously through the crowd, and waving
his hand as if he desired to have the train stopped. It was too late,
however, for we were rapidly gathering momentum, and an instant later
had shot clear of the station.

"With all our precautions, you see that we have cut it rather fine,"
said Holmes, laughing. He rose, and throwing off the black cassock and
hat which had formed his disguise, he packed them away in a hand-bag.

"Have you seen the morning paper, Watson?"

"No."

"You haven't' seen about Baker Street, then?"

"Baker Street?"

"They set fire to our rooms last night. No great harm was done."

"Good heavens, Holmes! this is intolerable."

"They must have lost my track completely after their bludgeon-man was
arrested. Otherwise they could not have imagined that I had returned
to my rooms. They have evidently taken the precaution of watching you,
however, and that is what has brought Moriarty to Victoria. You could
not have made any slip in coming?"

"I did exactly what you advised."

"Did you find your brougham?"

"Yes, it was waiting."

"Did you recognize your coachman?"

"No."

"It was my brother Mycroft. It is an advantage to get about in such a
case without taking a mercenary into your confidence. But we must plan
what we are to do about Moriarty now."

"As this is an express, and as the boat runs in connection with it, I
should think we have shaken him off very effectively."

"My dear Watson, you evidently did not realize my meaning when I said
that this man may be taken as being quite on the same intellectual plane
as myself. You do not imagine that if I were the pursuer I should allow
myself to be baffled by so slight an obstacle. Why, then, should you
think so meanly of him?"

"What will he do?"

"What I should do?"

"What would you do, then?"

"Engage a special."

"But it must be late."

"By no means. This train stops at Canterbury; and there is always at
least a quarter of an hour's delay at the boat. He will catch us there."

"One would think that we were the criminals. Let us have him arrested on
his arrival."

"It would be to ruin the work of three months. We should get the big
fish, but the smaller would dart right and left out of the net. On
Monday we should have them all. No, an arrest is inadmissible."

"What then?"

"We shall get out at Canterbury."

"And then?"

"Well, then we must make a cross-country journey to Newhaven, and so
over to Dieppe. Moriarty will again do what I should do. He will get on
to Paris, mark down our luggage, and wait for two days at the depot.
In the meantime we shall treat ourselves to a couple of carpet-bags,
encourage the manufactures of the countries through which we travel, and
make our way at our leisure into Switzerland, via Luxembourg and Basle."

At Canterbury, therefore, we alighted, only to find that we should have
to wait an hour before we could get a train to Newhaven.

I was still looking rather ruefully after the rapidly disappearing
luggage-van which contained my wardrobe, when Holmes pulled my sleeve
and pointed up the line.

"Already, you see," said he.

Far away, from among the Kentish woods there rose a thin spray of smoke.
A minute later a carriage and engine could be seen flying along the open
curve which leads to the station. We had hardly time to take our place
behind a pile of luggage when it passed with a rattle and a roar,
beating a blast of hot air into our faces.

"There he goes," said Holmes, as we watched the carriage swing and
rock over the points. "There are limits, you see, to our friend's
intelligence. It would have been a coup-de-maitre had he deduced what I
would deduce and acted accordingly."

"And what would he have done had he overtaken us?"

"There cannot be the least doubt that he would have made a murderous
attack upon me. It is, however, a game at which two may play. The
question now is whether we should take a premature lunch here, or run
our chance of starving before we reach the buffet at Newhaven."


We made our way to Brussels that night and spent two days there, moving
on upon the third day as far as Strasburg. On the Monday morning Holmes
had telegraphed to the London police, and in the evening we found a
reply waiting for us at our hotel. Holmes tore it open, and then with a
bitter curse hurled it into the grate.

"I might have known it!" he groaned. "He has escaped!"

"Moriarty?"

"They have secured the whole gang with the exception of him. He has
given them the slip. Of course, when I had left the country there was no
one to cope with him. But I did think that I had put the game in their
hands. I think that you had better return to England, Watson."

"Why?"

"Because you will find me a dangerous companion now. This man's
occupation is gone. He is lost if he returns to London. If I read his
character right he will devote his whole energies to revenging himself
upon me. He said as much in our short interview, and I fancy that he
meant it. I should certainly recommend you to return to your practice."

It was hardly an appeal to be successful with one who was an
old campaigner as well as an old friend. We sat in the Strasburg
salle-à-manger arguing the question for half an hour, but the same night
we had resumed our journey and were well on our way to Geneva.

For a charming week we wandered up the Valley of the Rhone, and then,
branching off at Leuk, we made our way over the Gemmi Pass, still deep
in snow, and so, by way of Interlaken, to Meiringen. It was a lovely
trip, the dainty green of the spring below, the virgin white of the
winter above; but it was clear to me that never for one instant did
Holmes forget the shadow which lay across him. In the homely Alpine
villages or in the lonely mountain passes, I could tell by his quick
glancing eyes and his sharp scrutiny of every face that passed us,
that he was well convinced that, walk where we would, we could not walk
ourselves clear of the danger which was dogging our footsteps.

Once, I remember, as we passed over the Gemmi, and walked along
the border of the melancholy Daubensee, a large rock which had been
dislodged from the ridge upon our right clattered down and roared into
the lake behind us. In an instant Holmes had raced up on to the ridge,
and, standing upon a lofty pinnacle, craned his neck in every direction.
It was in vain that our guide assured him that a fall of stones was a
common chance in the spring-time at that spot. He said nothing, but
he smiled at me with the air of a man who sees the fulfillment of that
which he had expected.

And yet for all his watchfulness he was never depressed. On the
contrary, I can never recollect having seen him in such exuberant
spirits. Again and again he recurred to the fact that if he could
be assured that society was freed from Professor Moriarty he would
cheerfully bring his own career to a conclusion.

"I think that I may go so far as to say, Watson, that I have not lived
wholly in vain," he remarked. "If my record were closed to-night I could
still survey it with equanimity. The air of London is the sweeter for my
presence. In over a thousand cases I am not aware that I have ever used
my powers upon the wrong side. Of late I have been tempted to look into
the problems furnished by nature rather than those more superficial ones
for which our artificial state of society is responsible. Your memoirs
will draw to an end, Watson, upon the day that I crown my career by
the capture or extinction of the most dangerous and capable criminal in
Europe."

I shall be brief, and yet exact, in the little which remains for me to
tell. It is not a subject on which I would willingly dwell, and yet I am
conscious that a duty devolves upon me to omit no detail.

It was on the 3d of May that we reached the little village of Meiringen,
where we put up at the Englischer Hof, then kept by Peter Steiler the
elder. Our landlord was an intelligent man, and spoke excellent English,
having served for three years as waiter at the Grosvenor Hotel in
London. At his advice, on the afternoon of the 4th we set off together,
with the intention of crossing the hills and spending the night at the
hamlet of Rosenlaui. We had strict injunctions, however, on no account
to pass the falls of Reichenbach, which are about half-way up the hill,
without making a small detour to see them.

It is indeed, a fearful place. The torrent, swollen by the melting snow,
plunges into a tremendous abyss, from which the spray rolls up like the
smoke from a burning house. The shaft into which the river hurls itself
is an immense chasm, lined by glistening coal-black rock, and narrowing
into a creaming, boiling pit of incalculable depth, which brims over and
shoots the stream onward over its jagged lip. The long sweep of green
water roaring forever down, and the thick flickering curtain of spray
hissing forever upward, turn a man giddy with their constant whirl and
clamor. We stood near the edge peering down at the gleam of the breaking
water far below us against the black rocks, and listening to the
half-human shout which came booming up with the spray out of the abyss.

The path has been cut half-way round the fall to afford a complete view,
but it ends abruptly, and the traveler has to return as he came. We had
turned to do so, when we saw a Swiss lad come running along it with
a letter in his hand. It bore the mark of the hotel which we had just
left, and was addressed to me by the landlord. It appeared that within a
very few minutes of our leaving, an English lady had arrived who was in
the last stage of consumption. She had wintered at Davos Platz, and was
journeying now to join her friends at Lucerne, when a sudden hemorrhage
had overtaken her. It was thought that she could hardly live a few
hours, but it would be a great consolation to her to see an English
doctor, and, if I would only return, etc. The good Steiler assured me
in a postscript that he would himself look upon my compliance as a very
great favor, since the lady absolutely refused to see a Swiss physician,
and he could not but feel that he was incurring a great responsibility.

The appeal was one which could not be ignored. It was impossible to
refuse the request of a fellow-countrywoman dying in a strange land. Yet
I had my scruples about leaving Holmes. It was finally agreed, however,
that he should retain the young Swiss messenger with him as guide and
companion while I returned to Meiringen. My friend would stay some
little time at the fall, he said, and would then walk slowly over the
hill to Rosenlaui, where I was to rejoin him in the evening. As I turned
away I saw Holmes, with his back against a rock and his arms folded,
gazing down at the rush of the waters. It was the last that I was ever
destined to see of him in this world.

When I was near the bottom of the descent I looked back. It was
impossible, from that position, to see the fall, but I could see the
curving path which winds over the shoulder of the hill and leads to it.
Along this a man was, I remember, walking very rapidly.

I could see his black figure clearly outlined against the green behind
him. I noted him, and the energy with which he walked but he passed from
my mind again as I hurried on upon my errand.

It may have been a little over an hour before I reached Meiringen. Old
Steiler was standing at the porch of his hotel.

"Well," said I, as I came hurrying up, "I trust that she is no worse?"

A look of surprise passed over his face, and at the first quiver of his
eyebrows my heart turned to lead in my breast.

"You did not write this?" I said, pulling the letter from my pocket.
"There is no sick Englishwoman in the hotel?"

"Certainly not!" he cried. "But it has the hotel mark upon it! Ha, it
must have been written by that tall Englishman who came in after you had
gone. He said--"

But I waited for none of the landlord's explanations. In a tingle of
fear I was already running down the village street, and making for the
path which I had so lately descended. It had taken me an hour to come
down. For all my efforts two more had passed before I found myself at
the fall of Reichenbach once more. There was Holmes's Alpine-stock still
leaning against the rock by which I had left him. But there was no sign
of him, and it was in vain that I shouted. My only answer was my own
voice reverberating in a rolling echo from the cliffs around me.

It was the sight of that Alpine-stock which turned me cold and sick.
He had not gone to Rosenlaui, then. He had remained on that three-foot
path, with sheer wall on one side and sheer drop on the other, until his
enemy had overtaken him. The young Swiss had gone too. He had probably
been in the pay of Moriarty, and had left the two men together. And then
what had happened? Who was to tell us what had happened then?

I stood for a minute or two to collect myself, for I was dazed with the
horror of the thing. Then I began to think of Holmes's own methods and
to try to practise them in reading this tragedy. It was, alas, only too
easy to do. During our conversation we had not gone to the end of the
path, and the Alpine-stock marked the place where we had stood. The
blackish soil is kept forever soft by the incessant drift of spray,
and a bird would leave its tread upon it. Two lines of footmarks were
clearly marked along the farther end of the path, both leading away from
me. There were none returning. A few yards from the end the soil was
all ploughed up into a patch of mud, and the branches and ferns which
fringed the chasm were torn and bedraggled. I lay upon my face and
peered over with the spray spouting up all around me. It had darkened
since I left, and now I could only see here and there the glistening of
moisture upon the black walls, and far away down at the end of the shaft
the gleam of the broken water. I shouted; but only the same half-human
cry of the fall was borne back to my ears.

But it was destined that I should after all have a last word of greeting
from my friend and comrade. I have said that his Alpine-stock had been
left leaning against a rock which jutted on to the path. From the top of
this bowlder the gleam of something bright caught my eye, and, raising
my hand, I found that it came from the silver cigarette-case which he
used to carry. As I took it up a small square of paper upon which it
had lain fluttered down on to the ground. Unfolding it, I found that it
consisted of three pages torn from his note-book and addressed to me. It
was characteristic of the man that the direction was a precise, and the
writing as firm and clear, as though it had been written in his study.

My dear Watson [it said], I write these few lines through the courtesy
of Mr. Moriarty, who awaits my convenience for the final discussion of
those questions which lie between us. He has been giving me a sketch
of the methods by which he avoided the English police and kept himself
informed of our movements. They certainly confirm the very high opinion
which I had formed of his abilities. I am pleased to think that I shall
be able to free society from any further effects of his presence, though
I fear that it is at a cost which will give pain to my friends, and
especially, my dear Watson, to you. I have already explained to you,
however, that my career had in any case reached its crisis, and that
no possible conclusion to it could be more congenial to me than this.
Indeed, if I may make a full confession to you, I was quite convinced
that the letter from Meiringen was a hoax, and I allowed you to depart
on that errand under the persuasion that some development of this sort
would follow. Tell Inspector Patterson that the papers which he needs
to convict the gang are in pigeonhole M., done up in a blue envelope
and inscribed "Moriarty." I made every disposition of my property before
leaving England, and handed it to my brother Mycroft. Pray give my
greetings to Mrs. Watson, and believe me to be, my dear fellow,

Very sincerely yours,

Sherlock Holmes


A few words may suffice to tell the little that remains. An examination
by experts leaves little doubt that a personal contest between the two
men ended, as it could hardly fail to end in such a situation, in their
reeling over, locked in each other's arms. Any attempt at recovering the
bodies was absolutely hopeless, and there, deep down in that dreadful
caldron of swirling water and seething foam, will lie for all time the
most dangerous criminal and the foremost champion of the law of their
generation. The Swiss youth was never found again, and there can be no
doubt that he was one of the numerous agents whom Moriarty kept in this
employ. As to the gang, it will be within the memory of the public
how completely the evidence which Holmes had accumulated exposed their
organization, and how heavily the hand of the dead man weighed
upon them. Of their terrible chief few details came out during the
proceedings, and if I have now been compelled to make a clear statement
of his career it is due to those injudicious champions who have
endeavored to clear his memory by attacks upon him whom I shall ever
regard as the best and the wisest man whom I have ever known.





End of the Project Gutenberg EBook of Memoirs of Sherlock Holmes, by 
Sir Arthur Conan Doyle

*** END OF THIS PROJECT GUTENBERG EBOOK MEMOIRS OF SHERLOCK HOLMES ***

***** This file should be named 834-8.txt or 834-8.zip *****
This and all associated files of various formats will be found in:
        http://www.gutenberg.org/8/3/834/

Produced by Angela M. Cable

Updated editions will replace the previous one--the old editions
will be renamed.

Creating the works from public domain print editions means that no
one owns a United States copyright in these works, so the Foundation
(and you!) can copy and distribute it in the United States without
permission and without paying copyright royalties.  Special rules,
set forth in the General Terms of Use part of this license, apply to
copying and distributing Project Gutenberg-tm electronic works to
protect the PROJECT GUTENBERG-tm concept and trademark.  Project
Gutenberg is a registered trademark, and may not be used if you
charge for the eBooks, unless you receive specific permission.  If you
do not charge anything for copies of this eBook, complying with the
rules is very easy.  You may use this eBook for nearly any purpose
such as creation of derivative works, reports, performances and
research.  They may be modified and printed and given away--you may do
practically ANYTHING with public domain eBooks.  Redistribution is
subject to the trademark license, especially commercial
redistribution.



*** START: FULL LICENSE ***

THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg-tm mission of promoting the free
distribution of electronic works, by using or distributing this work
(or any other work associated in any way with the phrase "Project
Gutenberg"), you agree to comply with all the terms of the Full Project
Gutenberg-tm License (available with this file or online at
http://gutenberg.org/license).


Section 1.  General Terms of Use and Redistributing Project Gutenberg-tm
electronic works

1.A.  By reading or using any part of this Project Gutenberg-tm
electronic work, you indicate that you have read, understand, agree to
and accept all the terms of this license and intellectual property
(trademark/copyright) agreement.  If you do not agree to abide by all
the terms of this agreement, you must cease using and return or destroy
all copies of Project Gutenberg-tm electronic works in your possession.
If you paid a fee for obtaining a copy of or access to a Project
Gutenberg-tm electronic work and you do not agree to be bound by the
terms of this agreement, you may obtain a refund from the person or
entity to whom you paid the fee as set forth in paragraph 1.E.8.

1.B.  "Project Gutenberg" is a registered trademark.  It may only be
used on or associated in any way with an electronic work by people who
agree to be bound by the terms of this agreement.  There are a few
things that you can do with most Project Gutenberg-tm electronic works
even without complying with the full terms of this agreement.  See
paragraph 1.C below.  There are a lot of things you can do with Project
Gutenberg-tm electronic works if you follow the terms of this agreement
and help preserve free future access to Project Gutenberg-tm electronic
works.  See paragraph 1.E below.

1.C.  The Project Gutenberg Literary Archive Foundation ("the Foundation"
or PGLAF), owns a compilation copyright in the collection of Project
Gutenberg-tm electronic works.  Nearly all the individual works in the
collection are in the public domain in the United States.  If an
individual work is in the public domain in the United States and you are
located in the United States, we do not claim a right to prevent you from
copying, distributing, performing, displaying or creating derivative
works based on the work as long as all references to Project Gutenberg
are removed.  Of course, we hope that you will support the Project
Gutenberg-tm mission of promoting free access to electronic works by
freely sharing Project Gutenberg-tm works in compliance with the terms of
this agreement for keeping the Project Gutenberg-tm name associated with
the work.  You can easily comply with the terms of this agreement by
keeping this work in the same format with its attached full Project
Gutenberg-tm License when you share it without charge with others.

1.D.  The copyright laws of the place where you are located also govern
what you can do with this work.  Copyright laws in most countries are in
a constant state of change.  If you are outside the United States, check
the laws of your country in addition to the terms of this agreement
before downloading, copying, displaying, performing, distributing or
creating derivative works based on this work or any other Project
Gutenberg-tm work.  The Foundation makes no representations concerning
the copyright status of any work in any country outside the United
States.

1.E.  Unless you have removed all references to Project Gutenberg:

1.E.1.  The following sentence, with active links to, or other immediate
access to, the full Project Gutenberg-tm License must appear prominently
whenever any copy of a Project Gutenberg-tm work (any work on which the
phrase "Project Gutenberg" appears, or with which the phrase "Project
Gutenberg" is associated) is accessed, displayed, performed, viewed,
copied or distributed:

This eBook is for the use of anyone anywhere at no cost and with
almost no restrictions whatsoever.  You may copy it, give it away or
re-use it under the terms of the Project Gutenberg License included
with this eBook or online at www.gutenberg.org

1.E.2.  If an individual Project Gutenberg-tm electronic work is derived
from the public domain (does not contain a notice indicating that it is
posted with permission of the copyright holder), the work can be copied
and distributed to anyone in the United States without paying any fees
or charges.  If you are redistributing or providing access to a work
with the phrase "Project Gutenberg" associated with or appearing on the
work, you must comply either with the requirements of paragraphs 1.E.1
through 1.E.7 or obtain permission for the use of the work and the
Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or
1.E.9.

1.E.3.  If an individual Project Gutenberg-tm electronic work is posted
with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any additional
terms imposed by the copyright holder.  Additional terms will be linked
to the Project Gutenberg-tm License for all works posted with the
permission of the copyright holder found at the beginning of this work.

1.E.4.  Do not unlink or detach or remove the full Project Gutenberg-tm
License terms from this work, or any files containing a part of this
work or any other work associated with Project Gutenberg-tm.

1.E.5.  Do not copy, display, perform, distribute or redistribute this
electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1 with
active links or immediate access to the full terms of the Project
Gutenberg-tm License.

1.E.6.  You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form, including any
word processing or hypertext form.  However, if you provide access to or
distribute copies of a Project Gutenberg-tm work in a format other than
"Plain Vanilla ASCII" or other format used in the official version
posted on the official Project Gutenberg-tm web site (www.gutenberg.org),
you must, at no additional cost, fee or expense to the user, provide a
copy, a means of exporting a copy, or a means of obtaining a copy upon
request, of the work in its original "Plain Vanilla ASCII" or other
form.  Any alternate format must include the full Project Gutenberg-tm
License as specified in paragraph 1.E.1.

1.E.7.  Do not charge a fee for access to, viewing, displaying,
performing, copying or distributing any Project Gutenberg-tm works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8.  You may charge a reasonable fee for copies of or providing
access to or distributing Project Gutenberg-tm electronic works provided
that

- You pay a royalty fee of 20% of the gross profits you derive from
     the use of Project Gutenberg-tm works calculated using the method
     you already use to calculate your applicable taxes.  The fee is
     owed to the owner of the Project Gutenberg-tm trademark, but he
     has agreed to donate royalties under this paragraph to the
     Project Gutenberg Literary Archive Foundation.  Royalty payments
     must be paid within 60 days following each date on which you
     prepare (or are legally required to prepare) your periodic tax
     returns.  Royalty payments should be clearly marked as such and
     sent to the Project Gutenberg Literary Archive Foundation at the
     address specified in Section 4, "Information about donations to
     the Project Gutenberg Literary Archive Foundation."

- You provide a full refund of any money paid by a user who notifies
     you in writing (or by e-mail) within 30 days of receipt that s/he
     does not agree to the terms of the full Project Gutenberg-tm
     License.  You must require such a user to return or
     destroy all copies of the works possessed in a physical medium
     and discontinue all use of and all access to other copies of
     Project Gutenberg-tm works.

- You provide, in accordance with paragraph 1.F.3, a full refund of any
     money paid for a work or a replacement copy, if a defect in the
     electronic work is discovered and reported to you within 90 days
     of receipt of the work.

- You comply with all other terms of this agreement for free
     distribution of Project Gutenberg-tm works.

1.E.9.  If you wish to charge a fee or distribute a Project Gutenberg-tm
electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
both the Project Gutenberg Literary Archive Foundation and Michael
Hart, the owner of the Project Gutenberg-tm trademark.  Contact the
Foundation as set forth in Section 3 below.

1.F.

1.F.1.  Project Gutenberg volunteers and employees expend considerable
effort to identify, do copyright research on, transcribe and proofread
public domain works in creating the Project Gutenberg-tm
collection.  Despite these efforts, Project Gutenberg-tm electronic
works, and the medium on which they may be stored, may contain
"Defects," such as, but not limited to, incomplete, inaccurate or
corrupt data, transcription errors, a copyright or other intellectual
property infringement, a defective or damaged disk or other medium, a
computer virus, or computer codes that damage or cannot be read by
your equipment.

1.F.2.  LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right
of Replacement or Refund" described in paragraph 1.F.3, the Project
Gutenberg Literary Archive Foundation, the owner of the Project
Gutenberg-tm trademark, and any other party distributing a Project
Gutenberg-tm electronic work under this agreement, disclaim all
liability to you for damages, costs and expenses, including legal
fees.  YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
PROVIDED IN PARAGRAPH F3.  YOU AGREE THAT THE FOUNDATION, THE
TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE
LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR
INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH
DAMAGE.

1.F.3.  LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a
defect in this electronic work within 90 days of receiving it, you can
receive a refund of the money (if any) you paid for it by sending a
written explanation to the person you received the work from.  If you
received the work on a physical medium, you must return the medium with
your written explanation.  The person or entity that provided you with
the defective work may elect to provide a replacement copy in lieu of a
refund.  If you received the work electronically, the person or entity
providing it to you may choose to give you a second opportunity to
receive the work electronically in lieu of a refund.  If the second copy
is also defective, you may demand a refund in writing without further
opportunities to fix the problem.

1.F.4.  Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER
WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE.

1.F.5.  Some states do not allow disclaimers of certain implied
warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted by
the applicable state law.  The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.

1.F.6.  INDEMNITY - You agree to indemnify and hold the Foundation, the
trademark owner, any agent or employee of the Foundation, anyone
providing copies of Project Gutenberg-tm electronic works in accordance
with this agreement, and any volunteers associated with the production,
promotion and distribution of Project Gutenberg-tm electronic works,
harmless from all liability, costs and expenses, including legal fees,
that arise directly or indirectly from any of the following which you do
or cause to occur: (a) distribution of this or any Project Gutenberg-tm
work, (b) alteration, modification, or additions or deletions to any
Project Gutenberg-tm work, and (c) any Defect you cause.


Section  2.  Information about the Mission of Project Gutenberg-tm

Project Gutenberg-tm is synonymous with the free distribution of
electronic works in formats readable by the widest variety of computers
including obsolete, old, middle-aged and new computers.  It exists
because of the efforts of hundreds of volunteers and donations from
people in all walks of life.

Volunteers and financial support to provide volunteers with the
assistance they need, is critical to reaching Project Gutenberg-tm's
goals and ensuring that the Project Gutenberg-tm collection will
remain freely available for generations to come.  In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a secure
and permanent future for Project Gutenberg-tm and future generations.
To learn more about the Project Gutenberg Literary Archive Foundation
and how your efforts and donations can help, see Sections 3 and 4
and the Foundation web page at http://www.pglaf.org.


Section 3.  Information about the Project Gutenberg Literary Archive
Foundation

The Project Gutenberg Literary Archive Foundation is a non profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service.  The Foundation's EIN or federal tax identification
number is 64-6221541.  Its 501(c)(3) letter is posted at
http://pglaf.org/fundraising.  Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state's laws.

The Foundation's principal office is located at 4557 Melan Dr. S.
Fairbanks, AK, 99712., but its volunteers and employees are scattered
throughout numerous locations.  Its business office is located at
809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email
business@pglaf.org.  Email contact links and up to date contact
information can be found at the Foundation's web site and official
page at http://pglaf.org

For additional contact information:
     Dr. Gregory B. Newby
     Chief Executive and Director
     gbnewby@pglaf.org


Section 4.  Information about Donations to the Project Gutenberg
Literary Archive Foundation

Project Gutenberg-tm depends upon and cannot survive without wide
spread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can be
freely distributed in machine readable form accessible by the widest
array of equipment including outdated equipment.  Many small donations
($1 to $5,000) are particularly important to maintaining tax exempt
status with the IRS.

The Foundation is committed to complying with the laws regulating
charities and charitable donations in all 50 states of the United
States.  Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and keep up
with these requirements.  We do not solicit donations in locations
where we have not received written confirmation of compliance.  To
SEND DONATIONS or determine the status of compliance for any
particular state visit http://pglaf.org

While we cannot and do not solicit contributions from states where we
have not met the solicitation requirements, we know of no prohibition
against accepting unsolicited donations from donors in such states who
approach us with offers to donate.

International donations are gratefully accepted, but we cannot make
any statements concerning tax treatment of donations received from
outside the United States.  U.S. laws alone swamp our small staff.

Please check the Project Gutenberg Web pages for current donation
methods and addresses.  Donations are accepted in a number of other
ways including checks, online payments and credit card donations.
To donate, please visit: http://pglaf.org/donate


Section 5.  General Information About Project Gutenberg-tm electronic
works.

Professor Michael S. Hart is the originator of the Project Gutenberg-tm
concept of a library of electronic works that could be freely shared
with anyone.  For thirty years, he produced and distributed Project
Gutenberg-tm eBooks with only a loose network of volunteer support.


Project Gutenberg-tm eBooks are often created from several printed
editions, all of which are confirmed as Public Domain in the U.S.
unless a copyright notice is included.  Thus, we do not necessarily
keep eBooks in compliance with any particular paper edition.


Most people start at our Web site which has the main PG search facility:

     http://www.gutenberg.org

This Web site includes information about Project Gutenberg-tm,
including how to make donations to the Project Gutenberg Literary
Archive Foundation, how to help produce our new eBooks, and how to
subscribe to our email newsletter to hear about new eBooks.
