#include <bits/stdc++.h>
using namespace std;
int n;
bool inv = false;
string s1, s2;
set<pair<int, int> > set1, set2;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  cin >> s1;
  cin >> s2;
  int c1 = 0, c2 = 0;
  for (char c : s1) c1 += (c == '?') ? 1 : 0;
  for (char c : s2) c2 += (c == '?') ? 1 : 0;
  if (c2 > c1) {
    swap(s1, s2);
    inv = true;
  }
  for (int i = 0; i < (n); i++) {
    int c = (int)s1[i];
    set1.insert({c, i});
  }
  for (int i = 0; i < (n); i++) {
    int c = (int)s2[i];
    set2.insert({c, i});
  }
  vector<pair<int, int> > res;
  vector<pair<int, int> > del;
  for (pair<int, int> v : set1) {
    if (v.first == 63) continue;
    auto f = set2.lower_bound({v.first, -999999});
    if (f != set2.end()) {
      pair<int, int> u = *f;
      if (u.first != v.first) continue;
      if (u.first == 63) continue;
      res.push_back({v.second, u.second});
      del.push_back(v);
      set2.erase(f);
    } else
      continue;
  }
  for (pair<int, int> v : del) set1.erase(v);
  del.clear();
  for (pair<int, int> v : set1) {
    if (v.first != 63) break;
    auto f = set2.lower_bound({64, -999999});
    if (f == set2.end()) {
      f = set2.begin();
    }
    res.push_back({v.second, (*f).second});
    set2.erase(f);
    del.push_back(v);
  }
  for (pair<int, int> v : del) set1.erase(v);
  for (pair<int, int> v : set2) {
    if (v.first != 63) break;
    auto f = set1.lower_bound({64, -999999});
    if (f == set1.end()) {
      f = set1.begin();
    }
    res.push_back({(*f).second, v.second});
    set1.erase(f);
  }
  cout << res.size() << "\n";
  for (pair<int, int> v : res) {
    pair<int, int> k = {v.first + 1, v.second + 1};
    if (inv) swap(k.first, k.second);
    cout << k.first << " " << k.second << "\n";
  }
}
