#include <bits/stdc++.h>
using namespace std;
const int N = 10000;
const long double pi = acos(-1.0);
int n, m, g[1 << 18], ok[1 << 18];
int f[1 << 18];
struct node {
  int u, v;
} edge[2020];
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while ((ch < '0') || (ch > '9')) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while ((ch >= '0') && (ch <= '9')) {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * f;
}
int main() {
  n = read();
  m = read();
  for (register int i = 1; i <= m; i++) {
    edge[i].u = read();
    edge[i].v = read();
  }
  g[0] = 998244353 - 1;
  int lim = (1 << n) - 1;
  for (register int i = 1; i <= lim; i++) {
    int pre = (i & (i - 1));
    g[i] = 998244353 - g[pre];
  }
  for (register int i = 1; i <= lim; i++) {
    ok[i] = 1;
    for (register int j = 1; j <= m; j++) {
      int u = edge[j].u, v = edge[j].v;
      if (((i >> (u - 1)) & 1) && ((i >> (v - 1)) & 1)) {
        ok[i] = 0;
        break;
      }
    }
  }
  f[0] = 1;
  for (register int now = 1; now <= lim; now++) {
    for (int i = now; i; i = (i - 1) & now) {
      if (!ok[i]) continue;
      f[now] = (f[now] + 1ll * f[now ^ i] * g[i] % 998244353);
      if (f[now] >= 998244353) f[now] -= 998244353;
    }
  }
  long long ans = 1ll * f[lim] * m % 998244353 * 499122177 % 998244353;
  printf("%lld", ans);
  return 0;
}
