#ifndef LOCAL
#define NDEBUG
#endif
#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
void setIO(string s) {
freopen((s+".in").c_str(), "r", stdin);
freopen((s+".out").c_str(), "w", stdout);
}
const int MAXN = 310;
int N;
char G[MAXN][MAXN];
bool isGood(int x, int y) {
return 0 <= x && x < N && 0 <= y && y < N && G[x][y] == '*';
}
i64 ans = 0;
void go() {
for (int a = 0; a < 2*N-1; a++) {
int st = max(0, a-N+1), en = min(a, N-1); // inclusive
for (int b = a+2, d = 1; b < 2*N-1; b += 2, d += 1) {
int curVal = 0;
for (int x = 1, y = b-a-1; x <= y; x++, y--) {
curVal += isGood(st+x, (a-st)+y) && isGood(st+x+d, (a-st)+y-d);
}
for (int i = st; i <= en; i++) {
assert(0 <= i && i < N);
assert(0 <= a-i && a-i < N);
if (G[i][a-i] == '*') ans += curVal;
curVal -= isGood(i+1, b-(i+1)) && isGood(i+1+d, b-(i+1+d));
curVal += isGood(i+1+d, b-(i+1+d)) && isGood(i+1+d+d, b-(i+1+d+d));
}
}
}
}
char tmp[MAXN][MAXN];
void rot90() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
tmp[N-1-j][i] = G[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
G[i][j] = tmp[i][j];
}
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> G[i];
}
for (int z = 0; z < 4; z++) {
go();
rot90();
}
cout << ans << '\n';
return 0;
}
I2lmbmRlZiBMT0NBTAojZGVmaW5lIE5ERUJVRwojZW5kaWYKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBpNjQgPSBpbnQ2NF90OwoKdm9pZCBzZXRJTyhzdHJpbmcgcykgewoJZnJlb3BlbigocysiLmluIikuY19zdHIoKSwgInIiLCBzdGRpbik7CglmcmVvcGVuKChzKyIub3V0IikuY19zdHIoKSwgInciLCBzdGRvdXQpOwp9Cgpjb25zdCBpbnQgTUFYTiA9IDMxMDsKaW50IE47CmNoYXIgR1tNQVhOXVtNQVhOXTsKCmJvb2wgaXNHb29kKGludCB4LCBpbnQgeSkgewoJcmV0dXJuIDAgPD0geCAmJiB4IDwgTiAmJiAwIDw9IHkgJiYgeSA8IE4gJiYgR1t4XVt5XSA9PSAnKic7Cn0KCmk2NCBhbnMgPSAwOwp2b2lkIGdvKCkgewoJZm9yIChpbnQgYSA9IDA7IGEgPCAyKk4tMTsgYSsrKSB7CgkJaW50IHN0ID0gbWF4KDAsIGEtTisxKSwgZW4gPSBtaW4oYSwgTi0xKTsgLy8gaW5jbHVzaXZlCgoJCWZvciAoaW50IGIgPSBhKzIsIGQgPSAxOyBiIDwgMipOLTE7IGIgKz0gMiwgZCArPSAxKSB7CgkJCWludCBjdXJWYWwgPSAwOwoJCQlmb3IgKGludCB4ID0gMSwgeSA9IGItYS0xOyB4IDw9IHk7IHgrKywgeS0tKSB7CgkJCQljdXJWYWwgKz0gaXNHb29kKHN0K3gsIChhLXN0KSt5KSAmJiBpc0dvb2Qoc3QreCtkLCAoYS1zdCkreS1kKTsKCQkJfQoJCQlmb3IgKGludCBpID0gc3Q7IGkgPD0gZW47IGkrKykgewoJCQkJYXNzZXJ0KDAgPD0gaSAmJiBpIDwgTik7CgkJCQlhc3NlcnQoMCA8PSBhLWkgJiYgYS1pIDwgTik7CgkJCQlpZiAoR1tpXVthLWldID09ICcqJykgYW5zICs9IGN1clZhbDsKCQkJCWN1clZhbCAtPSBpc0dvb2QoaSsxLCBiLShpKzEpKSAmJiBpc0dvb2QoaSsxK2QsIGItKGkrMStkKSk7CgkJCQljdXJWYWwgKz0gaXNHb29kKGkrMStkLCBiLShpKzErZCkpICYmIGlzR29vZChpKzErZCtkLCBiLShpKzErZCtkKSk7CgkJCX0KCQl9Cgl9Cn0KCmNoYXIgdG1wW01BWE5dW01BWE5dOwoKdm9pZCByb3Q5MCgpIHsKCWZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKCQkJdG1wW04tMS1qXVtpXSA9IEdbaV1bal07CgkJfQoJfQoJZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykgewoJCQlHW2ldW2pdID0gdG1wW2ldW2pdOwoJCX0KCX0KfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKSwgY2luLnRpZSgwKTsKCgljaW4gPj4gTjsKCWZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CgkJY2luID4+IEdbaV07Cgl9CgoJZm9yIChpbnQgeiA9IDA7IHogPCA0OyB6KyspIHsKCQlnbygpOwoJCXJvdDkwKCk7Cgl9Cgljb3V0IDw8IGFucyA8PCAnXG4nOwoKCXJldHVybiAwOwp9Cg==