#include <bits/stdc++.h>
using namespace std;
int n, i, j, t, cur, a[300], b[300];
string g[300];
vector<int> v;
bool used[300];
void dfs(int s) {
  used[s] = true;
  v.push_back(s);
  for (int i = 0; i < n; i++)
    if (!used[i] && g[s][i] == '1') dfs(i);
}
int main() {
  cin >> n;
  for (i = 0; i < n; i++) cin >> a[i];
  for (i = 0; i < n; i++) cin >> g[i];
  for (i = 0; i < n; i++) {
    v.clear();
    dfs(i);
    sort(v.begin(), v.end());
    for (j = 0; j < v.size(); j++) b[j] = a[v[j]];
    sort(b, b + v.size());
    for (j = 0; j < v.size(); j++) a[v[j]] = b[j];
  }
  for (i = 0; i < n; i++) cout << a[i] << ' ';
  return 0;
}
