public void Addlocationifvalid(location loc)
		{
			if (!visited.ContainsKey(loc) && isvalidlocation(loc))
			{

				validlocations.Add(loc);
				visited.Add(loc, false);
			}
		}
		public void visit(location loc)
		{
			if (visited.ContainsKey(loc))
			{
				visited[loc] = true;
			}
			else
			{
				visited.Add(loc, true);
			}
			CheckAndAddAdjacentLocation(loc);

		}
		//
		public void CheckAndAddAdjacentLocation(location loc)
		{
			location  right  = new location(loc.X + 1, loc.Y);
			location left = new location(loc.X - 1, loc.Y);
			location up = new location(loc.X, loc.Y + 1);
			location down = new location(loc.X, loc.Y - 1);

			Addlocationifvalid(right);
			Addlocationifvalid(left);
			Addlocationifvalid(up);
			Addlocationifvalid(down);

		}
		static void Main(string[] args)
		{
			GridWalk monkeywalk = new GridWalk();
			location orgin = new location(0, 0);
			GridWalk.validlocations.Add(orgin);
			int index = 0;
			while (true)
			{
				if (index >= validlocations.Count)
					break;
				monkeywalk.visit(GridWalk.validlocations[index]);
				index++;
			}

			Console.WriteLine(GridWalk.validlocations.Count);
			//Console.ReadLine();
		}
	  public static Dictionary<location,bool> visited =new Dictionary<location,bool>();//visted has location and bool value stating if the monkey traved the co-ordinated before.

		public bool isvalidlocation(location loc)
		{
			return (totalsum(loc.X)+totalsum(loc.Y))<=19;

		}