a:6:{i:0;s:21576:"				<div class="h1"><h1>Char dham Yatra(Ex Delhi) Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.pragyatravels.com/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.pragyatravels.com/tour-packages.htm" title="Packages">Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Char dham Yatra(Ex Delhi) Tour</p>
				<br />
				
								
						<script language="javascript"> 
							function topDestinationToggle(showHideDiv, switchTextDiv) {
							var ele = document.getElementById(showHideDiv);
							var text = document.getElementById(switchTextDiv);
							if(ele.style.display == "block") {
								ele.style.display = "none";
							  text.innerHTML = "View More &#9660;";
							}
							else {
							  ele.style.display = "block";
							  text.innerHTML = "View Less &#9650;";
							}
							}
		                </script>
											<script type="text/javascript">			
					(function($){	
					  $(function(){
						$('[id^=detailslider]').each(function(){
							$(this).DG_Slider({
								auto: true, mode:'fade', pager:true, pagerType:'short',controls:true
							});
						})
				
						$('a[rel=gall]').fancybox()
					  });	
					}(jQuery))
					</script>
					
					<br />
					<div class="data">
					<table class="w100 formTable bdr0 imgWidth">
					<tr>
					<td class="p10px">
					<table class="w100 packageForm">
											<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						11 Nights / 12 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">New Delhi, Haridwar, Chamoli, Rishikesh, Rudraprayag, Uttarkashi, Barkot, Auli, Jyotirmath</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price (Starting From) </td>
						<td class="p5px pl0px vat"><span class="dif">On Request</span></td>
						</tr>
												<tr>
						<td></td>
						<td>
						<p>
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.pragyatravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Char dham Yatra(Ex Delhi) Tour - Tour Package"/>
						<input type="hidden" name="allocate_type" value="tour"/>
						<a href="#" onclick="document.getElementById('frmpackagedetail').submit();" class="button p7px pl12px pr12px c5px b large dib mt10px">Book Your Tour</a>
						<input type="hidden" name="pkg_slno" value="68047"/>
						</form>
						</p>
						</td>
						</tr>
											</table>
					</td>
											<td class="p10px vat imgWidth150 w150px lh0">
						<div class="demo-wrap">
						<ul class="lsn m0px p0px" >
															<li class="bdr bw3px c5px p1px"><div class="dt"><p class="ac vam dtc w150px h150px"><a rel="gall" data-fancybox="showZoomImage" href="https://ttw.wlimg.com/package-images/photo-big/dir_15/434232/124057.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_15/434232/124057.jpg"  width="150" height="150"    alt="Char dham Yatra(Ex Delhi) Tour" title="Char dham Yatra(Ex Delhi) Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
											<div class="headHr">
			            <p class="p7px b pl10px xlarge">Tour Itinerary</p>
			            </div>
			            
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 1:</b> Delhi - Haridwar (230 Km/6-7hr & HT: 314mt)
								</p>
								<p class="aj">Arrival Delhi Airport / Delhi Railway Station, Meet & Assist further drive to Haridwar. Transfer to your Hotel. If time permits visit Bharat Mata Mandir, Bhuma Niketan, India Temple, Pawan Dham, Doodhadhari Temple & others. Later visit Har-ki-Pauri for Ganga Aarti. The 'Aarti' worship of the Ganga after sunset and the floating 'Diya' (lamp) is a moving ritual. Back to your hotel, Night halt.<br />
Haridwar, lying at the feet of Shiva's hills, i.e., Shivaliks, in the Haridwar district of Uttaranchal Pradesh, is a doorway. Suryavanshi prince Bhagirath performed penance here to salvage the souls of his ancestors who had perished due to the curse of sage Kapila. The penance was answered and the river Ganga trickled forth forms Lord Shiva's locks and its bountiful water revived the sixty thousand sons of king Sagara. In the traditional of Bhagirath, devout Hindus stand in the sacred waters here, praying for salvation of their departed elder. It is doorway to the sources of the Ganga and the Yamuna, 3000 to 4500 meters up into the snowy ranges of the central Himalayas.<br />
Weather - Generally hot in summer, the temperature ranges from 35-40 degree Celsius, Winter: The Days are pleasantly cool but the nights are cold, temp ranges from 20 deg to 05 deg.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 2:</b> Haridwar - Barkot (210kms/7-8hr & HT: 1319mt)
								</p>
								<p class="aj">Drive to Barkot via Mussoorie, en route visit Kempty Fall and others. Later drive straight to Barkot, transfer to your Hotel. Overnight stay at Barkot.<br />
Weather - Generally pleasant in summer, the temperature ranges from 25-30 degree Celsius, Winter: The Days are pleasantly cool but the nights are cold, temp ranges from 10 deg. to 05 deg.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 3:</b> Barkot - Yamunotri - Barkot {36km drive & 6km Trek (one side) & HT: 3235MT}
								</p>
								<p class="aj">Early morning,Drive to Jankichatti/Phoolchatti, trek start from here to Yamunotri (6kms). Either by walk or by horse or by Doli at own cost. Arr. Yamunotri, One can cook rice by packing it in a cloth and dipping it in the hot water of the hot kund. Pilgrims take this cooked rice home as "Prasad". Here near the temple "Pooja" can be offered to Divya Shila, After taking bath in Jamunabai Kund's warn water and having "Darshan" of pious "Yamunaji" returning to Jankichatti. Return back to Barkot, Overnight stay.<br />
Yamunotri Temple: Maharani Gularia of Jaipur built the temple in the 19th Century. It was destroyed twice in the present century and rebuilt again.<br />
Surya Kund: There are a Number of thermal springs in the vicinity of the temple, which flows into numerous pools. The most important of these is Surya Kund.<br />
Divya Shila: A rock pillar, worshipped before entering the Yamunotri Temple.<br />
Weather: In summer the maximun temp is 18 degrees and the minimum is 10 degrees celsius. The days are pleasantly cool but the nights are cold.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 4:</b> Barkot - Uttarkashi (100km/4hr & HT: 1352mt)
								</p>
								<p class="aj">Drive to Uttarkashi. VisitVishwanathTemple& Others. Check in Hotel. Rest day at leisure. Night Halt.<br />
Uttarkashi is home to a number of ashrams and temples and also to the Nehru Institute of Mountaineering. The name of the town reflects its similarity to and location (as north of) the city of Kashi (Varanasi). Similar to Varanasi, town of Uttarkashi is situated on the Ganges, lies next to a hill named Varun Parvat, on confluence of two rivers Varuna and Asi, has a ghat called Manikarnika Ghat and has a temple dedicated to Shiva (Kashi Vishwanath Temple) in the center of the town.<br />
Vishwanath temple - Vishwanath temple is one of the oldest Shiva temples in Northern India. Re-constructed in 1857 by Maharani Khaneti Devi of Tehri State in the ancient architectural style. It is situated at the heart of the town. A massive iron trident, symbolic of divine mother’s, is erected and worshiped from time immemorial at the temple complex. Ganeshji, Sakshi Gopal, Markandeya Rishi’s small shrines are also part of the temple complex. Akhand Jyoti as well as Akhand Abhishek, special aarti at morning and evening are offered. As per SkundaPuran, Uttarkashi is known as ‘Saumya Varanasi’, the abode of Lord Shiva in Kaliyug and counted as one of the twelve Jyotirlingas.<br />
Shakti temple - Right in front of the Vishwanath temple is Shakti temple. It has a big ‘Trishul’ of about 6 meters in height and a circumference of 90 cms. at bottom. Though there are different views about the making of this, the upper part of it seems to be made up of iron and the lower one is of copper. As per the epics this Shakti was thrown on the devils by the Goddess Durga(Shakti), hence it gets its name. Since then this Shakti is erected over here<br />
Weather - Generally hot in summer, the temperature ranges from 30-35 degree Celsius but nights is pleasant, Cold in winters.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 5:</b> Uttarkashi - Gangotri - Uttarkashi (100km/3-4 each side& HT: 3048)
								</p>
								<p class="aj">Early morning drive to Gangotri; en route at Gangnani take a holy dip in Garam Kund, further drive to Gangotri via beautiful Harsil Valley. Harsil is famous for its nature beauty and for the majestic views of the Deodar trees, and mountains. On arrival at Shree Gangotri, take a holy dip in the sacred river Ganges which is also called Bhagirathi at its origin. Perform Pooja and Darshan, after that relax for some time in the lovely surroundings. Return back to Uttarkashi. Overnight stay at Uttarkashi.<br />
Gangotri Temple: The temple, constructed by the Gorkha General Amar Singh Thapa in the 18th Century, is situated on the right bank of Bhagirathi.<br />
Submerged Shivling: Submerged in the river, this natural rock Shivling is the place where, according to mythology Lord Shiva sat when he received the Ganga in his matted lock. It is visible in winter months when water level decreases.<br />
Kedar Ganga Sangam: Around 100 Yards from the Ganga Temple flows the river Kedar Ganga. Starting from the Kedar Valle, this river meets the Bhagirathi on its left bank.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 6:</b> Uttarkashi - Guptkashi (220km/8-9hr & HT: 1319mt)
								</p>
								<p class="aj">Drive straight to Guptkashi via Moolgarh&Lambgoan. Enroute you can see the beautiful river Mandakini at Tilwara. The Mandakini river comes from Kedarnath, drive alongside the river to reach Guptakashi. On arrival Check In at the Hotel, evening visit ArdhNarishwar Temple. Overnight stay at the Hotel.<br />
<br />
The name Guptkashi means "Hidden Benares. Mythology describes how when the Pandava brothers were searching for a glimpse of Shiva, Shivji first concealed himself at Gupt Kashi, but later fled from them further up the valley to Kedarnath, where the Pandavas finally got their wish fulfilled. There are more tangible connections as well-the Kedarnath pandas (hereditary pilgrimage priests) live in Gupt Kashi during the winter months, and after the Kedarnath temple closes for the winter, the image of Kedarnath passes through Gupt Kashi on its way to Ukhimath (across the valley), where it stays for the winter.<br />
Weather - Generally pleasant in summer, the temperature ranges from 25-30 degree Celsius. Cold in winters.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 7:</b> Guptkashi - Kedarnath (30km by road & 19km Trek & HT: 3384mt)
								</p>
								<p class="aj">Morning drive to Gaurikund, Trek start from Gaurikund to Kedarnath by Pony / Doli. Tour members should carry personal medicines, heavy woolen, toiletries and clothes for an overnight halt at Kedarnath. Check in Hotel. Later visit Kedarnath Temple. Night halt.<br />
Kedarnath: The Kedarnath shrine, one of the 12 Jyotirlingas of Lord Shiva, is a scenic spot situated, against the backdrop of the majestic Kedarnath range. Kedar is another name of Lord Shiva, the protector and the destroyer. According to legend, the Pandava’s after having won over the Kaurava in the Kurukshetra war, felt guilty of having killed their own brothers and sought the blessings of Lord Shiva for redemption. He eluded them repeatedly and while fleeing took refuge at Kedarnath in the form of a bull. On being followed he dived into the ground, leaving his hump on the surface. The remaining portions of Lord Shiva appeared at four other places and are worshipped there as his manifestations. The arms appeared at Tungnath, the face at Rudranath, the belly at Madhmaheshwar and his locks (hair) with head at Kalpeshwar. Kedarnath and the four above-mentioned shrines are treated as Panch Kedar.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 8:</b> Kedarnath - Rudraprayag (19Km Down Trek & 75km/4hr by Road) & HT: 895mt)
								</p>
								<p class="aj">Early morning, after Temple Darshan trek down to Gaurikund. Later, drive to Rudraprayag via Guptkashi. Check in Hotel at Rudraprayag. Night Halt.<br />
Rudraprayag is one of the Panch Prayag (five confluences) of Alaknanda River, the point of confluence of rivers Alaknanda and Mandakini. Kedarnath, a Hindu holy town is located 86 km from Rudraprayag. The famous man eating Leopard of Rudraprayag hunted and written about by Jim Corbett (hunter) dwelled here.<br />
Weather - Generally hot in summer, the temperature ranges from 35-40 degree Celsius, Winter: The Days are pleasantly cool but the nights are cold, temp ranges from 20 deg. to 05 deg</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 9:</b> Rudraprayag - Badrinath (160km/7hr & HT: 3133mt)
								</p>
								<p class="aj">Drive to Badrinath via Joshimath. Check in Hotel. Later at evening visit Badrinath Temple for Aarti. Overnight stay.<br />
Badrinath one of the 'Four Dhams' is one of the most celebrated pilgrimage spots of the country and is situated at an elevation of 3,133 meters, guarded on either side by the two mountain ranges known as Nar & Narayan with the towering Neelkanth Peak providing a splendid backdrop. This revered spot was once carpeted with wild berries. Thus the place got the name "Badri van", meaning "forest of berries".<br />
Tapt Kund: Natural thermal springs on the bank of the river Alaknanda, where it is customary to bathe before entering the Badrinath temple.<br />
Narad Kund: A recess in the river, near Tapt Kund, forming a pool from where the Badrinath idol was recovered.<br />
Brahama Kapal: A flat platform on the bank of river Alaknanda. Hindus perform propitiating rites for their deceased ancestors.<br />
Sheshnetra: 1.5km away is a boulder having an impression of the legendary serpent, better known as the Sheshnag's eye.<br />
Charanpaduka: 3km away is a beautiful meadow where the footprint of Lord Vishnu is seen on a boulder.<br />
Mata Murti Temple: Devoted to the mother of Sri Badrinath ji. Other important temples include Sheshnetra Temple, Urvashi Temple and Charanpaduka.<br />
Mana Village: Inhabited by an Indo-Mongolian tribe, it is the last Indian village before Tibet.<br />
Vasundhara: As the name suggests, Vasundhara is a magnificent water fall. This place is 5 km from Badrinath out of which 2 km is motorable up to Mana.<br />
Bhim Pul: On the other side of Mana village, a massive rock forming a natural bridge lies over the roaring Saraswati river. It presents a spectacular view of water thundering down through the narrow passage under the rock and is believed to have been placed there by Bhim, the second eldest among the five Pandava brothers.<br />
Vyas Gufa (cave): Near Mana Village, this is a rock-cave where Ved Vyas is believed to have composed the Mahabharata and the pauranic commentaries.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 10:</b> Badrinath - Joshimath - Rudraprayag (160kms/7hr & HT: 895mt)
								</p>
								<p class="aj">Early morning, pilgrims after having a bath in the Taptkund have the Darshan of Badrivishal. Brahamakapal is significant for Pinddan Shraddh of ancestors (Pitrus). There are other interesting sightseeing spot like Mana, Vyas Gufa, Maatamoorti, Charanpaduka, Bhimkund and the "Mukh" of the Saraswati River. Just within the three kms of Badrinathjee. Later drive back to Rudraprayag via Joshimath. Check in Hotel. Overnight stay.<br />
Joshimath is situated on the slopes above the confluence of the rivers Alaknanda and Dhauliganga. Of the four 'Maths' established by Adi Shankaracharya, Joshimath is the winter seat of Badrinath. The idol is brought down to Joshimath and installed in the temple for people to worship. There are many other temples in the township. The most important is the temple of Nir Singh with the idol of Lord Vishnu. The left arm of this deity is getting destroyed with time and the popular belief holds that the day the arm completely withers Badrinath valley will cease to exist and the Gods will transfer the residence into the neighboring Niti Valley at Bhavishya Badri.</p>
								</td>
								</tr>
								</table>					
								</div><div id="show_more_content" style="display:none;">
									<div class="data">
									<table class="w100 formTable bdr0 imgWidth">
									<tr>
									<td class="p10px vat">
									<p class="b large mb5px"><b class="dif">Day 11:</b> Rudraprayag - Rishikesh (140km/4hr)
									</p>
									<p class="aj">Drive to Rishikesh, the 'place of sages' is a celebrated spiritual town on the bank of Ganga and is surrounded by Shivalik range of the Himalayas on three sides. It is said that when Raibhya Rishi did hard penances, God appeared by the name of "Hrishikesh" and this area hence firth came to be known as Rishikesh.<br />
Check in Hotel. Later visit Rishikesh Temples & Sight Seeing – Lakshman Jhulla, Ram Jhulla, Triveni Ghat, Bharat Mandir, Shivananda Ashram. At evening visit Ganga Aarti at Parmarth Ashram. Overnight stay.</p>
									</td>	
									</tr>
									</table>				
									</div>
									<div class="data">
									<table class="w100 formTable bdr0 imgWidth">
									<tr>
									<td class="p10px vat">
									<p class="b large mb5px"><b class="dif">Day 12:</b> Rishikesh - Hardwar - Delhi (250km/7-8hr )
									</p>
									<p class="aj">Drive back to Delhi. On Arr. Delhi, transfer to Railway Station / Airport. Tour Terminate.</p>
									</td>	
									</tr>
									</table>				
									</div>					
							</div>							<p class="mt10px ac"><a class="buttonBig p5px10px dib b" id="more_button" href="javascript:topDestinationToggle('show_more_content','more_button');" >View More &#9660;</a></p>
													<br />
												 <p class="headHr p7px b pl10px xlarge">Tour Detail</p>
			             <div class="data p15px aj">
										
						<p class="large b mb5px dif">Inclusions :</p>
						<ul>
															<li>Hotel</li>
																		<li>Sightseeing</li>
															</ul>
						<br />
											
						<p class="large b mb5px dif">Terms &amp; Conditions :</p>* Some Advance Percentage of total booking amount 
* Airfare/Transport fare to be paid full at one time in advance.~^#^~* Upon cancellation, refund will be made after deducting the Retention Amount. 
* Retention Amount varies as per the number of days left before your package start date. ~^#^~												</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.pragyatravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Char dham Yatra(Ex Delhi) Tour - Tour Package"/>
						<input type="hidden" name="allocate_type" value="tour"/>
						<a href="#" onclick="document.getElementById('frmpackagedetail').submit();" class="button p7px pl12px pr12px c5px b large dib mt10px">Book Your Tour</a>
						<input type="hidden" name="pkg_slno" value="68047"/>
						</form>
						</div>
						
						";i:1;s:71:"Book Char dham Yatra(Ex Delhi) Tour - 11 Nights / 12 Days Tour Packages";i:2;s:215:"book char dham yatra(ex delhi) tour - 11 nights / 12 days tour packages, religious & pilgrimage tour packages, new delhi, haridwar, chamoli, rishikesh, rudraprayag, uttarkashi, barkot, auli, jyotirmath tour packages";i:3;s:259:"Book Char dham Yatra(Ex Delhi) Tour - 11 Nights / 12 Days tour packages from Pr Travels - Get attractive 11 Nights / 12 Days Religious & Pilgrimage  tour packages for  New Delhi, Haridwar, Chamoli, Rishikesh, Rudraprayag, Uttarkashi, Barkot, Auli, Jyotirmath.";i:4;s:492:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "New Delhi, Haridwar, Chamoli, Rishikesh, Rudraprayag, Uttarkashi, Barkot, Auli, Jyotirmath"        
		                 },
		      "description": "",
		      "name": "Char dham Yatra(Ex Delhi) Tour",
		      "telephone": "+91-7060220730"
		    }
		    </script>
			";i:5;N;}