a:6:{i:0;s:14272:"				<div class="h1"><h1>Chadar Trek In Zanskar Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.nomadicsteps.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.nomadicsteps.co.in/packages.htm" title="Packages">Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Chadar Trek In Zanskar 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">
						9 Nights / 10 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Leh Ladakh</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.nomadicsteps.co.in/enquiry-form-10003.htm">
						<input type="hidden" name="subject" value="Chadar Trek In Zanskar 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="110000"/>
						</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_16/466826/181545.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_16/466826/181545.jpg"  width="150" height="150"    alt="Chadar Trek In Zanskar Tour" title="Chadar Trek In Zanskar 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> Arrival
								</p>
								<p class="aj">Arrival at the Leh Airport, one of the highest airports in the world. As you move out of the airport, the sheet of white snow and the stunning views are going to greet you. Meet our tour representation who helps you with in assisted transfer to the hotel/guest house. Rest of a while and in the evening, visit the local market of Leh where you can see that few eating joints and shops are open for the daily business. You can savor hot local food and can indulge in some last minute shopping, if the need be. As you take a walk here, you can feel the chill in the air.<br />
<br />
Overnight stay in the guest house/hotel.</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> Arrival at the Leh Airport, one of the highest airports in the world. As you move out of the airport
								</p>
								<p class="aj">The day is scheduled for sightseeing in Leh, exploring some of Ladakh’s most popular monasteries and local houses in the Indus Valley, driving along Indus River. The first visit is to the very popular Thiksey Monastery, also known as Mini Potala. Belonging to the Gelug sect of Buddhism, placed on a hilltop, this 12-stoery monastery has a beautiful statues, Thangkas, swords and other Buddhist relics. The next visit is to the Hemis Monastery- the largest and the richest monastery of Ladakh. Late afternoon arrival in the beautiful Stok Village for meeting a Ladakhi family and have a sneak-peek into their style of living. Savor Barley drink and their local butter tea. Back to Leh<br />
<br />
Stay overnight at the hotel/guest house.</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> Leh- Tilad Do via Chilling
								</p>
								<p class="aj">On day 3, in the morning, board a bus to Chilling. This road journey from Leh to Chilling offers a picturesque as well as thrilling ride. The bus travels along the Indus River, to the Nimu Village where you can see the confluence of Zanskar and Indus River. The bus stops here for some time so that tourists can take photographs. The drive later continues on the road that descends towards the right into the river valley. The snow-covered meandering road offers a thrilling ride and carries you to from Chilling to Tilad Do. Do not miss the stunning views of the snow-clad mountains.<br />
<br />
As you de-board the bus at Tilad Do, the trek expedition towards the campsite starts. You take your first step on the Chadar, which in Hindi means ‘sheet’. Cross the frozen Zanskar River carefully. Walking on the ice sheet takes some time as this is the first time. Slowly as the evening arrives, the team has to pitch the tent on the banks of the river. If you want, you can climb up a nearby mountain to have a good view of the wonderful surroundings. As the sun sets, the temperature also dips. Get into your warm sleeping bags to keep the body warm.<br />
<br />
Overnight in the tent.</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> Tilad Do - Gyalpo
								</p>
								<p class="aj">In the morning, get out of your sleeping bags and enjoy a cup of hot tea to fight the cold spread all around. The day includes a long trek session of around 12 km on the Zanskar Chadar. The guide briefs you about the walking technique on the frozen Zanskar River. The form of the frozen river varies as per the weather. It can either be slippery with hard and cold ice or can also have a dust of snow on it, which makes the walk easier. Follow the guide as the ice can be thick and thin at places and the locals know how this can be handled. The trek also involves walking through ankle deep water or climb on the cliffs, on the side of the river. Slowly you start walking, skating and gliding on the Chadar on your own.<br />
<br />
On the mid-way, you stop at Gyalpo where the porters-cum-cooks serve hot bowls of soupy noodles for lunch. This adds to the body’s need of sold as well as liquid intake. On walking past Shingra Koma, you arrive at the Gyalpo campsite where the potters have already pitched the tents. Positioned on a bend in the river, this site is enveloped by rock walls and high peaks. Enjoy an early dinner and get inside your warm sleeping bag, calling it a day.<br />
<br />
Overnight in camps.</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> Gyalpo - Tibb Cave
								</p>
								<p class="aj">On the 5th day of the Chadar trek, enjoy your tea at 7 in the morning and breakfast at 8. At 8:30, the trek begins. Have your breakfast properly as the day is scheduled for longest walk of this trekking expedition (14 km). The day takes you through deep ravines of the Zanskar. Most of the day, the chadar receives no sunshine as the area is covered with mountains on both the sides. The mountains also have caves. Walk past frozen waterfalls. On the way, you will also come across little greenery near the only waterfall, which does not freezes and has an interesting ancient fable behind the same. Once you reach Tibb, you can see a huge cave, your dwelling for the day. The porters serve you hot butter tea.<br />
<br />
Overnight camping.</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> Tibb Cave to Naerak
								</p>
								<p class="aj">The day is scheduled for offering immense natural beauty. Keep walking on the river, crossing deep gorges. You arrive at a place where prayer flags cover the Juniper trees. You can also tie a prayer flag here for good health and good luck. The porters assisting must be having these flags. Just a few steps away is the biggest frozen waterfall of the region and next to it is a bridge, made across the river, which is used in the summer time for come to Leh from Zanskar. Now the trek further is a difficult one. An hour long trek brings you to Naerak Village, which is several feet above the river. This is a Zanskari village where your camp is set, near the river. Relax once you arrive.<br />
<br />
Overnight stay in the camp.</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> Naerak - Tibb
								</p>
								<p class="aj">Today the return journey starts. Start trekking back to the Tibb Cave. Do not get careless thinking that you have already covered this trek before. Be quite careful as the river can change its form at any time. On your way back, you meet locals who are wearing traditional woolen Gonchas. Some of these people can be monks, who are traveling to Leh from the Lingshed Monastery. Arrival at Tibb.</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> Tibb – Gyalpo
								</p>
								<p class="aj">Start walking from Tibb and keep walking till Gyalpo. The high-rising mountain walls on the sides of the river, make it look like these are walls of the castle. Spot the pug marks of animals such as ibex, foxes and snow leopards.<br />
<br />
Overnight at Gyalpo.</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> Gyalpo - Tilad Do - Drive to Leh
								</p>
								<p class="aj">Day 9 is the last day of walking on the Chadar. Keep walking till you reach Tilad Do. Now is the time to say goodbye to the River Zanskar and the team. Your road journey to Leh starts. On arrival, complete the check-in formalities at guest house/hotel.<br />
<br />
Overnight stay in Leh.</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> Departure from Leh
								</p>
								<p class="aj">This memorable trekking expedition comes to an end today. From the Leh airport, go aboard the flight for your onward journey.</p>
								</td>
								</tr>
								</table>					
								</div>						<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.nomadicsteps.co.in/enquiry-form-10003.htm">
						<input type="hidden" name="subject" value="Chadar Trek In Zanskar 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="110000"/>
						</form>
						</div>
						
						";i:1;s:67:"Book Chadar Trek In Zanskar Tour - 9 Nights / 10 Days Tour Packages";i:2;s:117:"book chadar trek in zanskar tour - 9 nights / 10 days tour packages, trekking tour packages, leh ladakh tour packages";i:3;s:147:"Nomadic Steps offers Chadar Trek In Zanskar Tour - 9 Nights / 10 Days tour package, budget Trekking tour packages for Leh Ladakh at exciting price.";i:4;s:409:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Leh Ladakh"        
		                 },
		      "description": "",
		      "name": "Chadar Trek In Zanskar Tour",
		      "telephone": "+91-9469261146"
		    }
		    </script>
			";i:5;N;}