static void Search(String city, long start_date, long end_date, int beds)
	{
		// clear previous temporary search data
		bedResults.clear();
		results.clear();
		
		ArrayList<Hostel> hostels;
		hostels = (city != "") ? GetHostelsByCity(city):hostel21;
		
		if(hostels.size() == 0)
		{
			System.out.println("No search result found! Try different arguments.");
			return;
		}
		
		for(int i=0; i<hostels.size(); i++)
		{
			System.out.println("Hostel #" + (i+1) + ", " + hostels.get(i).getAddress().getCity());
			ArrayList<Date> dates = hostels.get(i).GetHostelDatesByRange(start_date, end_date);
			
			if(beds == -1)
				for(int j=0; j<dates.size(); j++)
					System.out.println(dates.get(j).GetBedAvailabilitiesWithPrices());
			else
			{
				if(SearchByPriority(dates, beds))
				{
					ArrayList<String> list = ConvertBedArrayListToStringArrayList(bedResults, dates.size(), beds);
					if(bedResults.size() == 0)
					{
						System.out.println("No search result found! Try different arguments.");
						return;
					}
					
					Search.GenerateSearchIDs(list, hostels.get(i).getAddress().getCity(), dates, beds);
				}
				else
				{
					ArrayList<ArrayList<String>> bedsCombinations = new ArrayList<ArrayList<String>>(beds);
					GetSearchResults(bedsCombinations, dates, 0, "", beds);
					if(results.size() == 0)
					{
						System.out.println("No search result found! Try different arguments.");
						return;
					}
					
					Search.GenerateSearchIDs(results, hostels.get(i).getName(), dates, beds);
				}
			}
				
			System.out.println();
		}
	}