#include <bits/stdc++.h>
#define int long long
#define ii pair<int, int>
using namespace std;
const int N = 2e5+5;
string s;
int n, m, ans[N];
vector<int> g[N];
int parA[N], szA[N];
int parS[N];
bool onV[N];
int cntPair = 0;
int find_parA(int x) { return parA[x] == x ? x : parA[x] = find_parA(parA[x]); }
void MergeA(int a, int b){
a = find_parA(a); b = find_parA(b);
if(a == b) return;
parA[b] = a;
cntPair += szA[a] * szA[b];
szA[a] += szA[b];
}
int find_parS(int x) { return parS[x] == x ? x : parS[x] = find_parS(parS[x]); }
void MergeS(int a, int b){
a = find_parS(a); b = find_parS(b);
if(a != b) parS[b] = a;
}
int compId[N];
int repComp[N];
signed main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m >> s;
s = ' ' + s;
for(int i=1; i<=n; ++i){
parA[i] = i; szA[i] = 1; onV[i] = 0;
parS[i] = i; repComp[i] = 0; compId[i] = 0;
}
vector<ii> adj;
for(int i=0; i<m; ++i){
int u, v; cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
adj.push_back({u, v});
}
for(auto [u,v] : adj)
if(s[u] == '1' && s[v] == '1')
MergeS(u, v);
for(int i=1; i<=n; ++i)
if(s[i] == '1')
compId[i] = find_parS(i);
for(int t=n; t>0; --t){
onV[t] = 1;
szA[t] = 1;
parA[t] = t;
for(int v : g[t]){
if(onV[v])
MergeA(t, v);
else if(s[v] == '1') {
int k = compId[v];
int r = repComp[k];
if(r) MergeA(t, r);
repComp[k] = find_parA(t);
}
}
ans[t] = cntPair;
}
for(int i=1; i<=n; ++i)
cout << ans[i] << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBOID0gMmU1KzU7CgpzdHJpbmcgczsKaW50IG4sIG0sIGFuc1tOXTsKdmVjdG9yPGludD4gZ1tOXTsKCmludCBwYXJBW05dLCBzekFbTl07CmludCBwYXJTW05dOwpib29sIG9uVltOXTsKaW50IGNudFBhaXIgPSAwOwoKaW50IGZpbmRfcGFyQShpbnQgeCkgeyByZXR1cm4gcGFyQVt4XSA9PSB4ID8geCA6IHBhckFbeF0gPSBmaW5kX3BhckEocGFyQVt4XSk7IH0KCnZvaWQgTWVyZ2VBKGludCBhLCBpbnQgYil7CiAgICBhID0gZmluZF9wYXJBKGEpOyBiID0gZmluZF9wYXJBKGIpOwogICAgaWYoYSA9PSBiKSByZXR1cm47CiAgICBwYXJBW2JdID0gYTsKICAgIGNudFBhaXIgKz0gc3pBW2FdICogc3pBW2JdOwogICAgc3pBW2FdICs9IHN6QVtiXTsKfQoKaW50IGZpbmRfcGFyUyhpbnQgeCkgeyByZXR1cm4gcGFyU1t4XSA9PSB4ID8geCA6IHBhclNbeF0gPSBmaW5kX3BhclMocGFyU1t4XSk7IH0KCnZvaWQgTWVyZ2VTKGludCBhLCBpbnQgYil7CiAgICBhID0gZmluZF9wYXJTKGEpOyBiID0gZmluZF9wYXJTKGIpOwogICAgaWYoYSAhPSBiKSBwYXJTW2JdID0gYTsKfQoKaW50IGNvbXBJZFtOXTsKaW50IHJlcENvbXBbTl07CgpzaWduZWQgbWFpbigpIHsKICAgIGNpbi50aWUoMCktPnN5bmNfd2l0aF9zdGRpbygwKTsKCiAgICBjaW4gPj4gbiA+PiBtID4+IHM7IAogICAgcyA9ICcgJyArIHM7CgogICAgZm9yKGludCBpPTE7IGk8PW47ICsraSl7CiAgICAgICAgcGFyQVtpXSA9IGk7IHN6QVtpXSA9IDE7IG9uVltpXSA9IDA7CiAgICAgICAgcGFyU1tpXSA9IGk7IHJlcENvbXBbaV0gPSAwOyBjb21wSWRbaV0gPSAwOwogICAgfQoKICAgIHZlY3RvcjxpaT4gYWRqOwogICAgZm9yKGludCBpPTA7IGk8bTsgKytpKXsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh1KTsKICAgICAgICBhZGoucHVzaF9iYWNrKHt1LCB2fSk7CiAgICB9CgogICAgZm9yKGF1dG8gW3Usdl0gOiBhZGopCiAgICAgICAgaWYoc1t1XSA9PSAnMScgJiYgc1t2XSA9PSAnMScpIAogICAgICAgICAgICBNZXJnZVModSwgdik7CgogICAgZm9yKGludCBpPTE7IGk8PW47ICsraSkKICAgICAgICBpZihzW2ldID09ICcxJykgCiAgICAgICAgICAgIGNvbXBJZFtpXSA9IGZpbmRfcGFyUyhpKTsKCiAgICBmb3IoaW50IHQ9bjsgdD4wOyAtLXQpewogICAgICAgIG9uVlt0XSA9IDE7CiAgICAgICAgc3pBW3RdID0gMTsKICAgICAgICBwYXJBW3RdID0gdDsKCiAgICAgICAgZm9yKGludCB2IDogZ1t0XSl7CiAgICAgICAgICAgIGlmKG9uVlt2XSkKICAgICAgICAgICAgICAgIE1lcmdlQSh0LCB2KTsKICAgICAgICAgICAgZWxzZSBpZihzW3ZdID09ICcxJykgewogICAgICAgICAgICAgICAgaW50IGsgPSBjb21wSWRbdl07CiAgICAgICAgICAgICAgICAgICAgaW50IHIgPSByZXBDb21wW2tdOwogICAgICAgICAgICAgICAgICAgIGlmKHIpIE1lcmdlQSh0LCByKTsKICAgICAgICAgICAgICAgICAgICByZXBDb21wW2tdID0gZmluZF9wYXJBKHQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBhbnNbdF0gPSBjbnRQYWlyOwogICAgfQoKICAgIGZvcihpbnQgaT0xOyBpPD1uOyArK2kpCiAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgJ1xuJzsKCiAgICByZXR1cm4gMDsKfQ==