#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define pli pair<ll, int>
#define float double
using namespace std;
const int ma=3e5+5;
vector <int> g[ma];
ll dp[ma][5];
const int mod=998244353;
int vt[ma];
int sz[ma];

void dfs (int u, int pr) {
    vt[u]=1;
    for (int v:g[u]) {
        if (v==pr) continue;
        if (vt[v]) {
            if (sz[v]%2==0) continue;
            cout << 0;
            exit(0);
        }
        dfs (v, u);
        dp[u][1]=(dp[u][1]*dp[v][2])%mod;
        dp[u][3]=(dp[u][3]*dp[v][2])%mod;
        ll cur=(dp[v][1]%mod + dp[v][3]%mod)%mod;
        dp[u][2]=(dp[u][2]*cur)%mod;
        sz[u]+=sz[v];
    }
    vt[u]=2;
}

main () {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    int n, m;
    cin >> n >> m;
    for (int i=1; i<=m; i++) {
        int u, v;
        cin >> u >> v;
        if (u==v) {
            cout << 0;
            return 0;
        }
        g[u].pb(v);
        g[v].pb(u);
    }
    for (int i=1; i<=n; i++) {
        sort(g[i].begin(), g[i].end());
        g[i].erase (unique(g[i].begin(), g[i].end()), g[i].end());
        sz[i]=1;
    }
    fill (&dp[0][0], &dp[0][0]+ma*5, 1LL);
    ll ans=1;
    for (int i=1; i<=n; i++) {
        if (vt[i]) continue;
         dfs (i, 0);
         ll sum=(dp[i][1]%mod + dp[i][2]%mod + dp[i][3]%mod)%mod;
         //cout << sum << endl;
         ans=(ans%mod * sum %mod) %mod;
    }
    cout << ans;
}
