#include <bits/stdc++.h>
using namespace std;
ifstream fi("input.txt");
ofstream fo("output.txt");
const int N = 1e5 + 5;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n, m, k, cnt, rs1;
long long maxx = -1e9, minn = 1e9;
const int maxn = N;
const long long MOD = 1e9 + 7;
int rs;
vector<int> va[500], vb[500];
vector<pair<int, int> > ans;
int main() {
  {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
  };
  cin >> n;
  string a, b;
  cin >> a >> b;
  for (int(i) = 0; (i) < (n); (i)++) {
    va[a[i]].push_back(i);
    vb[b[i]].push_back(i);
  }
  for (int(i) = 0; (i) < (500); (i)++) {
    if (i != '?')
      while (va[i].size() && vb[i].size()) {
        ans.push_back(make_pair(va[i].back(), vb[i].back()));
        va[i].pop_back();
        vb[i].pop_back();
      }
  }
  for (int(i) = 0; (i) < (500); (i)++) {
    if (i != '?') {
      while (va[i].size() && vb['?'].size()) {
        ans.push_back(make_pair(va[i].back(), vb['?'].back()));
        va[i].pop_back();
        vb['?'].pop_back();
      }
      while (vb[i].size() && va['?'].size()) {
        ans.push_back(make_pair(va['?'].back(), vb[i].back()));
        vb[i].pop_back();
        va['?'].pop_back();
      }
    }
  }
  for (int(i) = 0; (i) < (500); (i)++) {
    while (va[i].size() && vb['?'].size()) {
      ans.push_back(make_pair(va[i].back(), vb['?'].back()));
      va[i].pop_back();
      vb['?'].pop_back();
    }
    while (vb[i].size() && va['?'].size()) {
      ans.push_back(make_pair(va['?'].back(), vb[i].back()));
      vb[i].pop_back();
      va['?'].pop_back();
    }
  }
  cout << ans.size() << "\n";
  for (int(i) = 0; (i) < (ans.size()); (i)++)
    cout << ans[i].first + 1 << " " << ans[i].second + 1 << "\n";
}
