#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
int taken[200];
int done[200];
int main() {
  int n;
  string a, b;
  cin >> n >> a >> b;
  deque<int> v1[200];
  deque<int> v2[200];
  for (int i = 0; i < n; i++) v1[a[i]].push_back(i + 1);
  for (int i = 0; i < n; i++) v2[b[i]].push_back(i + 1);
  vector<pair<int, int>> p;
  for (int i = 0; i < 200; i++) {
    if (i != 63) {
      int MIN = min((int)v1[i].size(), (int)v2[i].size());
      for (int j = 0; j < MIN; j++) {
        p.push_back({v1[i][0], v2[i][0]});
        v1[i].pop_front();
        v2[i].pop_front();
      }
    }
  }
  int SZ = v1[63].size();
  for (int i = 0; i < SZ; i++) {
    for (int j = 0; j < 200; j++) {
      if (j != 63 && !v2[j].empty()) {
        p.push_back({v1[63][0], v2[j][0]});
        v1[63].pop_front();
        v2[j].pop_front();
        break;
      }
    }
  }
  SZ = v1[63].size();
  for (int i = 0; i < SZ; i++) {
    for (int j = 0; j < 200; j++) {
      if (j == 63 && !v2[j].empty()) {
        p.push_back({v1[63][0], v2[j][0]});
        v1[63].pop_front();
        v2[j].pop_front();
        break;
      }
    }
  }
  SZ = v2[63].size();
  for (int i = 0; i < SZ; i++) {
    for (int j = 0; j < 200; j++) {
      if (j != 63 && !v1[j].empty()) {
        p.push_back({v1[j][0], v2[63][0]});
        v1[j].pop_front();
        v2[63].pop_front();
        break;
      }
    }
  }
  cout << p.size() << endl;
  for (auto x : p) {
    cout << x.first << " " << x.second << endl;
  }
}
