#include <bits/stdc++.h>
using namespace std;
int n, m, k;
bitset<31> vis;
int dx[6] = {-1, 1, 0, 0, 0, 0};
int dy[6] = {0, 0, -1, 1, 0, 0};
int dz[6] = {0, 0, 0, 0, -1, 1};
int valid(int z, int x, int y) {
  if (z < 0 || z >= k || x < 0 || x >= n || y < 0 || y >= m) return 0;
  return 1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  string s1, s2;
  cin >> s1 >> s2;
  queue<int> st1[26], st2[26], sp1, sp2;
  vector<pair<int, int>> v;
  for (int i = 0; i < s1.size(); i++) {
    if (s1[i] != '?') {
      st1[s1[i] - 97].push(i + 1);
    } else {
      sp1.push(i + 1);
    }
    if (s2[i] != '?') {
      st2[s2[i] - 97].push(i + 1);
    } else {
      sp2.push(i + 1);
    }
  }
  for (int i = 0; i < 26; i++) {
    while (st1[i].size() > 0 && st2[i].size() > 0) {
      v.push_back(make_pair(st1[i].front(), st2[i].front()));
      st1[i].pop();
      st2[i].pop();
    }
    while (st1[i].size() > 0 && sp2.size() > 0) {
      v.push_back(make_pair(st1[i].front(), sp2.front()));
      st1[i].pop();
      sp2.pop();
    }
  }
  for (int i = 0; i < 26; i++) {
    while (sp1.size() > 0 && st2[i].size() > 0) {
      v.push_back(make_pair(sp1.front(), st2[i].front()));
      sp1.pop();
      st2[i].pop();
    }
    while (sp1.size() > 0 && sp2.size() > 0) {
      v.push_back(make_pair(sp1.front(), sp2.front()));
      sp1.pop();
      sp2.pop();
    }
  }
  cout << v.size() << '\n';
  for (int i = 0; i < v.size(); i++) {
    cout << v[i].first << " " << v[i].second << '\n';
  }
}
