def create_evasion_ground_truth(user_data, evasive_spams):
	"""Assign label 1 to evasive spams and 0 to all existing reviews; Assign labels to accounts accordingly
	Args:
		user_data: key = user_id, value = list of review tuples.
			user_data can contain only a subset of reviews
			(for example, if some of the reviews are used for training)

		evasive_spams: key = product_id, value = list of review tuples

	Return:
		user_ground_truth: key = user id (not prefixed), value = 0 (non-spam) /1 (spam)
		review_ground_truth: review id (not prefixed), value = 0 (non-spam) /1 (spam)
	"""
	old_spammers = set()
	old_spams = set()

	user_ground_truth = {}
	review_ground_truth = {}

	# assign label 0 to all existing reviews and users
	for user_id, reviews in user_data.items():
		user_ground_truth[user_id] = 0

		for r in reviews:
			prod_id = r[0]
			label = r[2]
			review_ground_truth[(user_id, prod_id)] = 0

			if label == -1:
				old_spams.add((user_id, prod_id))
				old_spammers.add(user_id)

	# exclude previous spams and spammers, since the controlled accounts are selcted from the normal accounts.
	for r_id in old_spams:
		review_ground_truth.pop(r_id)
	for u_id in old_spammers:
		user_ground_truth.pop(u_id)

	# add label 1 to the evasive spams
	for prod_id, spams in evasive_spams.items():

		for r in spams:
			user_id = r[0]

			review_ground_truth[(user_id, prod_id)] = 1
			# this user now has posted at least one spam, so set its label to 1
			user_ground_truth[user_id] = 1

	return user_ground_truth, review_ground_truth