#include <bits/stdc++.h>
void sub(int *aa, int n) {
  int i, b;
  for (i = 0; i < n; i++)
    for (b = 0; b < 1 << n; b++)
      if ((b & 1 << i) != 0 && (aa[b] += aa[b ^ 1 << i]) >= 998244353)
        aa[b] -= 998244353;
}
int main() {
  static int adj[18], cnt[1 << 18], dp[18 + 1][1 << 18];
  static long long dq[18 + 1][1 << 18];
  int n, m, h, i, j, k, l, b, c;
  long long ans;
  scanf("%d%d", &n, &m);
  for (h = 0; h < m; h++) {
    scanf("%d%d", &i, &j), i--, j--;
    adj[i] |= 1 << j, adj[j] |= 1 << i;
  }
  for (b = 1; b < 1 << n; b++) cnt[b] = cnt[b & b - 1] + 1;
  for (b = 1; b < 1 << n; b++) {
    c = 0;
    for (i = 0; i < n; i++)
      if ((b & 1 << i) != 0) c |= adj[i];
    if ((b & c) != 0) continue;
    dp[cnt[b]][b] = cnt[b] % 2 == 0 ? 998244353 - 1 : 1;
  }
  for (k = 0; k <= n; k++) sub(dp[k], n);
  for (b = 0; b < 1 << n; b++) dq[0][b] = 1;
  for (k = 0; k < n; k++) {
    for (b = 0; b < 1 << n; b++) dq[k][b] %= 998244353;
    for (l = 1; k + l <= n; l++)
      for (b = 0; b < 1 << n; b++)
        if ((dq[k + l][b] += dq[k][b] * dp[l][b]) >= 996491788296388609LL)
          dq[k + l][b] -= 996491788296388609LL;
  }
  ans = 0;
  for (b = 0; b < 1 << n; b++)
    ans += dq[k][b] % 998244353 * (cnt[(1 << n) - 1 ^ b] % 2 == 0 ? 1 : -1);
  ans %= 998244353;
  if (ans < 0) ans += 998244353;
  ans = ans * m % 998244353 * 499122177 % 998244353;
  printf("%lld\n", ans);
  return 0;
}
