#include <bits/stdc++.h>
using namespace std;
int N, M;
const int et = 18;
const int mod = 998244353;
int G[1 << et];
long long S[1 << et];
int I[1 << et];
int A, B, C;
void iterate1(int mask, int add, int par) {
  if (mask == 0) {
    B = add;
    C = A - B;
    if (B != 0 && I[B]) {
      S[A] += par ? S[C] : (mod - S[C]);
      if (S[A] >= mod) S[A] -= mod;
    }
    return;
  }
  int d = mask & -mask;
  iterate1(mask - d, add, par);
  iterate1(mask - d, add + d, 1 ^ par);
}
int main() {
  cin >> N >> M;
  for (int i = 0; i < N; i++) G[1 << i] = 0;
  for (int i = 0; i < M; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    G[1 << a] |= (1 << b);
    G[1 << b] |= (1 << a);
  }
  I[0] = 1;
  for (int i = 1; i < (1 << N); i++) {
    int d = i & -i;
    I[i] = I[i - d] && !((i - d) & G[d]);
  }
  S[0] = 1;
  for (A = 1; A < (1 << N); A++) {
    S[A] = 0;
    iterate1(A, 0, 0);
  }
  long long ans = S[(1 << N) - 1];
  ans *= 499122177;
  ans %= mod;
  ;
  ans *= M;
  ans %= mod;
  ;
  cout << ans << endl;
}
