#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const long long MOD = (long long)1e9 + 7;
long long add(long long x, long long y) {
  x += y;
  if (x >= MOD) return x - MOD;
  return x;
}
long long sub(long long x, long long y) {
  x -= y;
  if (x < 0) return x + MOD;
  return x;
}
long long mult(long long x, long long y) { return (x * y) % MOD; }
long long bin_pow(long long x, long long p) {
  if (p == 0) return 1;
  if (p & 1) return mult(x, bin_pow(x, p - 1));
  return bin_pow(mult(x, x), p / 2);
}
long long rev(long long x) { return bin_pow(x, MOD - 2); }
const int N = 7;
const int M = (1 << N) + 1;
int ppc[M];
int idInPpc[M];
vector<int> maskForPpc[N + 1];
long long trans[N + 1][M][M];
int n;
unordered_map<long long, long long> dp[N + 1];
long long A[N][N];
void precalc() {
  for (int mask = 1; mask < (1 << n); mask++)
    ppc[mask] = ppc[mask >> 1] + (mask & 1);
  for (int mask = 0; mask < (1 << n); mask++) {
    int k = ppc[mask];
    idInPpc[mask] = (int)maskForPpc[k].size();
    maskForPpc[k].push_back(mask);
  }
  for (int k = 0; k <= n; k++)
    for (int i = 0; i < (int)maskForPpc[k].size(); i++) {
      int inM = maskForPpc[k][i];
      for (int mask = 0; mask < (1 << n); mask++) {
        long long res = 0;
        if ((mask & inM) == mask) continue;
        for (int v = 0; v < n; v++) {
          if (((mask >> v) & 1) == 0) continue;
          if ((inM >> v) & 1) continue;
          int nmask = inM | (1 << v);
          res |= 1LL << idInPpc[nmask];
        }
        trans[k][i][mask] = res;
      }
    }
}
void read() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      scanf("%lld", &A[i][j]);
      A[i][j] = mult(A[i][j], rev(100));
    }
}
int main() {
  scanf("%d", &n);
  precalc();
  read();
  dp[0][1] = 1;
  for (int k = 0; k < n; k++)
    for (int mask = 0; mask < (1 << n); mask++) {
      long long W = 1;
      for (int i = 0; i < n; i++) {
        if ((mask >> i) & 1)
          W = mult(W, A[k][i]);
        else
          W = mult(W, sub(1, A[k][i]));
      }
      for (pair<long long, long long> s : dp[k]) {
        long long zmask = s.first, val = s.second;
        long long nmask = 0;
        for (int i = 0; i < (int)maskForPpc[k].size(); i++) {
          if ((zmask >> i) & 1) nmask |= trans[k][i][mask];
        }
        if (nmask == 0) continue;
        val = mult(val, W);
        dp[k + 1][nmask] = add(dp[k + 1][nmask], val);
      }
    }
  printf("%lld\n", dp[n][1]);
  return 0;
}
