文件目录

// 记录路径
#include <bits/stdc++.h>
using namespace std;
int n, m;
int g[505][505];
bool v[505][505];
set<string> s;
int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
string str;
void dfs(int x, int y, int c)
{
    v[x][y] = 1;
    for (int i = 0; i < 4; i++)
    {
        int xx = x + dir[i][0];
        int yy = y + dir[i][1];
        if (!v[xx][yy] && xx >= 1 && xx <= n && yy >= 1 && yy <= m && c == g[xx][yy])
        {
            str += char(i + 48);
            dfs(xx, yy, c);
        }
    }
    str += '*'; // 特殊结点处理
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> g[i][j];
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            if (!v[i][j])
            {
                str = "";
                dfs(i, j, g[i][j]);
                s.insert(str);
            }
    cout << s.size();
    return 0;
}