// Arup Guha
// 2/10/2024
// Solution to Kattis Problem: Geppetto
// Used to illustrate combinations for Junior Knights

import java.util.*;

public class geppetto {
	
	public static HashSet<Integer>[] nomix;

	public static void main(String[] args) {
	
		Scanner stdin = new Scanner(System.in);
		
		// Read in the information.
		int n = stdin.nextInt();
		nomix = new HashSet[n];
		for (int i=0; i<n; i++)
			nomix[i] = new HashSet<Integer>();
		
		// Number of bad pairs.
		int numBad = stdin.nextInt();
		
		// Store for each topping which other ones can't be with it.
		for (int i=0; i<numBad; i++) {
			int a = stdin.nextInt()-1;
			int b = stdin.nextInt()-1;
			nomix[a].add(b);
			nomix[b].add(a);
		}
		
		// Try all combos, run it and print.
		int[] odom = new int[n];
		int res = odometer(odom, 0);
		System.out.println(res);
	}
	
	public static int isvalid(int[] combo) {
	
		// Form this combination of toppings from my 0/1 array.
		ArrayList<Integer> tmp = new ArrayList<Integer>();
		for (int i=0; i<combo.length; i++)
			if (combo[i] == 1)
				tmp.add(i);
				
		// Try all pairs of toppings.
		for (int i=0; i<tmp.size(); i++) {
			for (int j=i+1; j<tmp.size(); j++) {
				int a = tmp.get(i);
				int b = tmp.get(j);
				
				// If these two can't mix, this isn't a valid pizza.
				if (nomix[a].contains(b)) return 0;
			}
		}
		
		// If we get here, it's valid.
		return 1;				
	}

	/*** Note: Normally I would rename this, but I wanted to show how
	           the base odometer code would be adapted to solve this
			   question
	***/
	public static int odometer(int[] list, int k) {

		// Done filling it in.
		if (k == list.length)
			return isvalid(list);
			
		// Try each possible item in slot k, in numeric order, and recurse.
		else {
			int res = 0;
			for (int i=0; i<2; i++) {
				list[k] = i;
				res += odometer(list, k+1);
			}
			return res;
		}
	}
}