#include<bits/stdc++.h>
using namespace std;

const int M = 998244353;
const int N = 1e5+7;
const long long B = 1000000000000000000;
typedef long long LL;

LL pb[N];
void pre() {
    pb[0] = 1;
    LL b = B%M;
    for (int i=1; i<N; i++)
        pb[i] = (pb[i-1]*b)%M;
}

vector<int> bfs(vector<vector<int>>adj) {
    int n = adj.size()-1;
    vector<int> col(n+1, N);

    vector<bool> vis(n);
    for (int i=n; i>0; i--) {
        for (int v: adj[i]) {
            if (v > i)    vis[col[v]] = 1;
        }

        for (int ii=0; ii<=n; ii++)
            if (!vis[ii]) {
                col[i] = ii;
                break;
            }

        for (int v: adj[i]) {
            if (v > i)    vis[col[v]] = 0;
        }
    }
    return col;
}

int m[3];
vector<vector<int>> adj[3];
vector<int> dis[3];
vector<LL> con[3];

int main() {
    pre();

    int n;
    cin>>n;
    const int MX = 1<<17;

    for (int g=0; g<3; g++) {
        cin>>m[g];
        adj[g].resize(n+1);
        for (int i=0; i<m[g]; i++) {
            int u, v;
            cin>>u>>v;
            adj[g][u].push_back(v);
            adj[g][v].push_back(u);
        }
        dis[g] = bfs(adj[g]);

        con[g].resize(MX);
        for (int i=1; i<=n; i++) {
            con[g][dis[g][i]] = (con[g][dis[g][i]] + pb[i])%M;
        }
    }
    LL ans = 0;
    for (int i=0; i<MX; i++) {
        if (con[0][i] == 0) continue;
        for (int j=0; j<MX; j++) {
            if (con[1][j] == 0)  continue;
            ans = (ans + ((con[0][i]*con[1][j])%M)*con[2][i^j])%M;
        }
    }
    cout<<ans<<endl;
}
