a:6:{i:0;s:22077:"				<div class="h1"><h1>Grand Himachal Tour With Amritsar</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.northindiatravel.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.northindiatravel.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Grand Himachal Tour With Amritsar</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">
						10 Nights / 11 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Chandigarh City, Chamba, Kullu, Manali, Mandi, Shimla, Amritsar</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.northindiatravel.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Grand Himachal Tour With Amritsar - 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="54701"/>
						</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_11/307359/105495.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_11/307359/105495.jpg"  width="150" height="150"    alt="Grand Himachal Tour With Amritsar" title="Grand Himachal Tour With Amritsar" /></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> Chandigarh to Shimla & Shimla to local Market Visit
								</p>
								<p class="aj">Pick up Chandigarh see Run Way Site Seen. to move Shimla Hotel After Freeh Visit Shimla One of the most popular places to go to for shopping is at the Mall road in Shimla. This place is the shopping hub and commercial center of Shimla , local side seen the Shimla. All Local side seen , National Park Poney and Yak Ride and One can see the endless Himalayan One can findsmall Souvenirs and knick- knacks here along handicrafts and other artifacts that Shimla is famous for.You can buy the famous Himachali caps that are available in almost any Project, Pandoh dam local. The Ridge that lies along the famous Mall Road is the main venue of all the cultural activities in the town. Being the most popular shopping center in the city, Shimla Ridge links the most important commercial spots such as Lakkar Bazaar, The Mall, Scandal Point, Jakhoo Hill, among others. The Ridge is home to numerous Shimla's landmarks built in Neo-Gothic style that are a must for sightseeing in Shimla. The place is host to the famous Shimla Summer festival that goes on for 5 days and invites travelers from all corners of the world. The festival showcases different performances by local and national artists. Christ Church is the second oldest church in Northern IndiarnNight Shimla</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> Shimla to Kufri & Local Visit
								</p>
								<p class="aj">Morning After Breakfast Visit Kufri is famous for its Himalayan Panorama from Kufri, explore the various places in and around Shimla . Lying just 24 km from Shimla Mall Road, Shilon Bagh houses outstanding resorts. From here you can access easily a fabulous tourist destination Kufri, situated at (2,633 meters in height) 16 km far from Shimla. The region is an epitome of serenity and tranquility that embraces the most pristine and breathtaking environs. The region is highly visited for its awe-inspiring beauty that is the love of every backpacker who wishes to rejoice amidst the most natural environs of Shimla. Apart from this, the region offers some of the finest accommodation facilities to travelers to make sure they enjoy the most empyrean luxury and comfort. Another tourist attraction Jakhu Hill is locatedrnjust 2 km away from Shimla. Lying at a height of 8000 ft, Jakhu Hill has the highest peak of this hill station, offering an amusing view of Shimla and also the snow-clad Himalayas. The Jakhu Hill is also home to the famous Jakhu temple, which is located the hill comprises a large statue of Lord Hanuman that stands at an elevation of 2,455 m (8,000 feet) above sea level and is one of its kind to be situated at such great height. Dedicated to Lord Hanuman, The temple is one of the most pious places in Shimla that is visited by numerous travelers. Visit Local site SeenrnNight Shimla</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> Shimla Local Market Visit to Kullu to Mandi to Manali
								</p>
								<p class="aj">Morning After Breakfast Check Out Hotel see Run way Side Seen to Kullu :: According to ancient Hindu scriptures, the area was known as ‘Kulantapitha’ - the end of the habitable world. Nestling within the high Himalayan ranges, the Kullu valley remained isolated from the rest of the world till very recently. The Hindu rulers of Kullu initially ruled over an area restricted to the upper Beas River valley, with their capital in the ancient village of Jagatsukh near Manali. The valley was a gateway to Lahaul and Ladakh andan importantrnstop on the crucial trade route between central Asia and the Gangetic Plains down south. This made the area prosperous and by the 17th century AD, the kingdom had expanded its boundaries to Lahaul-Spiti in the north and the Sutlej River in the east. The capital of the kingdom was first shifted to Naggar, then to Sultanpur before finally settling at Kullu. Kullu grew into an important town when Raja Jagat Singh shifted the capital of the kingdom from Naggar in the mid-17th century. The idol of Lord Raghunathji (Lord Rama, an incarnation ofrnVishnu, one of the gods in the Hindu trinity), the presiding deity of this town, was brought from his mythical birthplace in Ayodhya by the king. Declared the district headquarters after independence, Kullu is now an important market town for the region, and a transit point for travellers going on to the more popular Manali, 40 kms north. Kullu is also the focal point for trekkers into the Parvati valley and the Pin valley & Then See Run Way Side Seen To Move to Mandi The present District Of Mandi was formed with the merger of two princely states Mandi and Suket on 15th April 1948, when the State of Himachal Pradesh came into existence. Ever since the formation of the district, it has not witnessed any changes in it's jurisdiction., Mandi local Market visit & Then See Run Way Side Seen to go Manali Manali is situated near the end of the valley on thernNational Highway leading to Leh. The landscape here is breath taking. One sees well-defined snow capped peaks, the Beas river with its clear water meanders through the town. On the other side are deodar and pinerntrees, tiny fields and fruit orchards. It is an excellent place for a holiday, a favorite resort for trekkers to Lahaul, Spiti, Bara Bhangal, and Zanskar rangesrnrnrnNight Manali</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> Manali to Rohtangpass Visit
								</p>
								<p class="aj">Morning move to Rotangpass, gateway to Lahaul-Spiti valley. It affords a wide panoramic view of the mountains. Here one sees the majesty of the mountains at its height and splendour. At the top of the pass the air seems to glitter against the snow as you look down over herringboned ridges into the Lahaul valley. Rohtang pass - and enjoy the hight ,back manali visit manali local market, Free time for shopping or leisure activities. Enjoy get together with your travel companions in the evening. rnNight Manali</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> Manali Local side seen Visit & Local Market Visit
								</p>
								<p class="aj">See Local Manali Like Hadimba Temple, Manu Temple ,Vashisht Bath, Van Vihar,,,,See Run Way Side Seen Manali Is Situated Near The End Of The Valley On The National Highway Leading To Leh. The Landscape Here Is Breath Taking. One Sees Well-Defined Snow Capped Peaks, The Beas River With Its Clear Water Meanders Through The Town. On The Other Side Are Deodar And Pine Trees, Tiny Fields And Fruit Orchards. It Is An Excellent Place For A Holiday, A Favorite Resort For Trekkers To Lahaul, Spiti, Bara Bhangal , And Zanskar Ranges. From Temples To Antiquity, To Picturesque Sight-Seeing Spots And Adventure Activities, Manali Is A Popular Resort For All Seasons And For All Travellers Visit,,,,See Run Way Side Seen Manali Is Situated Near The End Of The Valley On The National Highway Leading To Leh. The Landscape Here Is Breath Taking. One Sees Well-Defined Snow Capped Peaks, The Beas River With Its Clear Water Meanders Through The Town. On The Other Side Are Deodar And Pine Trees, Tiny Fields And Fruit Orchards. It Is An Excellent Place For A Holiday, A Favorite Resort For Trekkers To Lahaul, Spiti, Bara Bhangal (Kangra), And Zanskar Ranges. From Temples To Antiquity, To Picturesque Sight-Seeing Spots And Adventure Activities, Manali Is A Popular Resort For All Seasons And For All Travelers  Explore The Beautiful Surrounding Of Manali. Enjoy Thrills Of Water Rafting In Beas River (Subject To Operation).rnNight Manali</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> Manali to Manikaran To Dharamshala Local Market Visit
								</p>
								<p class="aj">Morning After Breakfast Check Out Hotel See run Way Side Seen To, visit Manikaran , is famous for its hot springs. Thousands of people take a holy dip in hot waters here. The water is so hot that dal, rice & vegetables etc. can be cooked in it. It is also a well known pilgrimage place for both Hindus & Sikhs. Ramchandra and Shivaji temples besides a Gurudwara are there. According to an old legend, Manikaran is connected with Lord Shiva and his divine consort, Parvati, who lost her ear rings here, which gave birth to hot waters on the bank of Parvati river Manikaran is a pilgrimage centre for Hindus and Sikhs. The Hindus believe that Manu recreated human life in Manikaran after the flood, making it a sacred area. It has many temples and a gurudwara.[1] There are temples of the Hindu deities Rama, Krishna, andVishnu.[2] The area is well known for its hot springs[3] and its beautiful landscape. After This Visit See Run Way Side Seen to Move Dharamshala, popularly known as the ‘Queen of the Hills’, is divided into lower and upper towns with a difference of 457m(1500ft.) between them. The mountains enfold 3 sides of the town and the valley stretches to the south. There is a beautiful resort of Dharamshala, which stands on the spur of the Dharamshala range. Visit Local market Visitrn  Night Dharamshala</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> Dharamshala to Naddi To McleodganJ
								</p>
								<p class="aj">Morning After Breakfast See Run Way Side Seen To Move Naddi ,, Naddi Local Visit After This Visit McleodganJ . The arrival of the Tibetan spiritual leader, the Dalai Lama, along with thousands of refugees to Dharamshala in 1959 made the life here more active. number of tibetan settlements with religious education and other rehabilitation centres mushroomed all over the Mcleadganj. As Dharamshala became the headquarter of the Tibetan Government in exile, headed by Dalai Lama, it gained prominence all over the world and prominent personalities started arriving here. Mcleadganj emerged as a major Buddhist centre.,, After This Visit See Run Way Side Seen To Move Dalhousie. Dalhousie has been named after the BritishrnGovernor - General of the l9th century,Lord Dalhousie. Surrounded by varied vegetation - pines, dodders, oaks and flower in Night Dharamshala</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> Dharamshala To Dalhousie Local Market Visit  & Local Side Seen Visit
								</p>
								<p class="aj">Night Dalhousie</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> Dalhousie Local To Khajjiar
								</p>
								<p class="aj">Kalatop(10 km) This wild life sanctuary is home to the 'ghoral' and Himalayan black bear. After This Visit Move Khajjiar "Khajjiar is a forest glade of great beauty, 6400 feet above sea level". Khajjiar is often reffered to as "Gulmarg of Himachal Pradesh". The lush green meadows are surrounded by thick pine and cedar forests. Grazing herds of sheep, goats and other milch cattle present a prefect pastoral scenery. There is a small lake in the center of the saucer shaped meadow which has in it a floating island. Much of the lake has degenerated into slush because of heavy silting during rains. Still the landscape of Khajjiar is picturesque and a photographer's delight. A little away from the lake is the temple of Khajji Nag belonging to 12th C. AD. In the mandapa of the temple one can see the images of the Pandavas and the defeated Kaurvas hanging from the roof of the circumambulatory path. The sanctum of the temple has been beautifully carved from wood.. On 07-07-1992, Mr. Willy t. Blazer, Vice Counselor and Head of Chancery of Switzerland in India brought Khajjiar on the world tourism map by christening it "Mini Switzerlan". He also put a sign board of a yellow Swiss hiking footpath showing Khajjiar's distance from the Swiss capital Berne-6194 kms. Khajjiar is among the 160 locations in the world that bear topographical resemblance with Switzerland. The Counselor also took from Khajjiar a stone which will form part of a stone collage around the Swiss Parliament to remind the visitors of Khajjiar as Mini Switzerland of India.rnrnrn Night Dalhousie</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> Dalhousie to Amritsar & Bhagah Border Visit
								</p>
								<p class="aj">Morning After Breakfast Check Out hotel Visit See Run Way Side Seen To Move Amritsar Evening Time Visit Wagah Border in Amritsar between Pakistan and India is the only road border between the two countries. It lies on the Grand Trunk Road between the cities of Amritsar, Punjab, India, and Lahore, Punjab, Pakistan. The border is located 22 km from Lahore and 28 km from Amritsar. Apart from its national significance it is visited with great patriotism and enthusiasm for the ceremony that happens every day before sunset. The highlight is lowering of the flags of the two countries simultaneously. The flags are folded and the ceremony ends with a gesture that involves a brusque handshake between soldiers from either side which is followed by the closing of the gates. The spectacle of the ceremony attracts many visitors from both sides of the border, as well as international tourists for its high energy and enthusiastic ceremonial practice. This checkpoint at Wagah Border in Amritsar draws plenty of global attention and affords a stage for Indian and Pakistani paramilitaryrnforces to strut their tough stuff. Each sunset, there are noisy partisan crowds cheering on the BSF and the Rangers as they present arms with much stage managed, in-your-face ceremony, each side trying to outdo the other. On special occasions, liberals on both sides take out candle-lit processions.rnrnGolden Temple Night View rnNight Amritsar</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> Amritsar Local To Drop Chandigarh
									</p>
									<p class="aj">Early Morning After Breakfast Visit Jallianwala Bagh, is a public garden in Amritsar in thePunjab state of India, and houses a memorial of national importance, established in 1951 by the Government of India, to commemorate the massacre by British occupying forces of peaceful celebrators including unarmed women and children, on the occasion of the Punjabi New Year on April 13, 1919 in theJallianwala Bagh Massacre. Colonial British Raj sources identified 379 fatalities and estimated about 1100 wounded.[1] Civil Surgeon Dr. Smith indicated that there were 1,526 casualties.[2] The true figures of fatalities are unknown, but are likely to be many times higher than the official figure of 379. The 6.5-acre (26,000 m2) garden site of the massacre is located in the vicinity of Golden Temple complex, the holiest shrine of Sikhism.The memorial is managed by the Jallianwala Bagh National Memorial Trust, which was established as per the Jallianwala Bagh National Memorial Act passed by the Government of India in 1951 Local Market Visit. to Seen Run Way Side Seen to drop Chandigarh.</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.northindiatravel.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Grand Himachal Tour With Amritsar - 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="54701"/>
						</form>
						</div>
						
						";i:1;s:63:"Book Grand Himachal Tour With Amritsar - 111 Days Tour Packages";i:2;s:172:"book grand himachal tour with amritsar - 111 days tour packages, lakes & rivers tour packages, chandigarh city, chamba, kullu, manali, mandi, shimla, amritsar tour packages";i:3;s:210:"Book Grand Himachal Tour With Amritsar - 111 Days tour packages from MD Tour Travels - Get attractive 111 Days Lakes & Rivers  tour packages for  Chandigarh City, Chamba, Kullu, Manali, Mandi, Shimla, Amritsar.";i:4;s:468:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Chandigarh City, Chamba, Kullu, Manali, Mandi, Shimla, Amritsar"        
		                 },
		      "description": "",
		      "name": "Grand Himachal Tour With Amritsar",
		      "telephone": "+91-9646469331"
		    }
		    </script>
			";i:5;N;}