diff --git a/hyracks/hyracks-examples/text-example/textserver/data/file2.txt b/hyracks/hyracks-examples/text-example/textserver/data/file2.txt
index a25d303..f2eff1c 100644
--- a/hyracks/hyracks-examples/text-example/textserver/data/file2.txt
+++ b/hyracks/hyracks-examples/text-example/textserver/data/file2.txt
@@ -1,10216 +1,10216 @@
-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
-
+Project Gutenberg's Memoirs of Sherlock Holmes, by Sir Arthur Conan Doyle
 
-*** 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.
+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.
